diff --git a/spec/structure/parallel_structure.spec.ts b/spec/structure/parallel_structure.spec.ts index 8a4d442f68e2554d15ec08a883c5933d11a89098..d7bf22a27ade7686274e5996f6a318bc23386497 100644 --- a/spec/structure/parallel_structure.spec.ts +++ b/spec/structure/parallel_structure.spec.ts @@ -83,7 +83,6 @@ const ps2: ParallelStructure = new ParallelStructure( false // debug ); -// tslint:disable-next-line:prefer-for-of describe("Class ParallelStructure: ", () => { // Ajout d'une structure de chaque type dans ParallelStructure const iLoiDebits: number[] = []; diff --git a/spec/structure/structure_test.ts b/spec/structure/structure_test.ts index 6ff1af5f39e0eee3857d1fca6445608079c34e18..fd9a2a1b4d8fb415ae5203ba8cf0313cd861848d 100644 --- a/spec/structure/structure_test.ts +++ b/spec/structure/structure_test.ts @@ -42,6 +42,13 @@ class StructureTest extends Structure { return new Result(this.prms.Z1.v - this.prms.Z2.v, data); } + /** + * 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); + } + } /* Test structure with : diff --git a/spec/structure/structure_triangular_trunc_weir_free.spec.ts b/spec/structure/structure_triangular_trunc_weir_free.spec.ts index f11fc424ed3735e5ff034f07b81aa31f64d07adf..44f883598f0e336ed86c941e17700db4c73df905 100644 --- a/spec/structure/structure_triangular_trunc_weir_free.spec.ts +++ b/spec/structure/structure_triangular_trunc_weir_free.spec.ts @@ -8,7 +8,7 @@ import { StructureFlowMode, StructureFlowRegime } from "../../src/structure/structure"; import { StructureTriangularTruncWeirFree } from "../../src/structure/structure_triangular_trunc_weir_free"; -import { TriangularTruncStructureParams } from "../../src/structure/triangular_trunc_structure_params"; +import { TriangularTruncStructureParams } from "../../src/structure/structure_triangular_trunc_weir_free_params"; import { itCalcQ } from "./functions"; const structPrm: TriangularTruncStructureParams = diff --git a/spec/structure/structure_triangular_weir_free.spec.ts b/spec/structure/structure_triangular_weir_free.spec.ts index c16821a86312cda7d44d01a700ff47036a5d6695..849811d4d95e3c415400f111dfbb82a3c938a741 100644 --- a/spec/structure/structure_triangular_weir_free.spec.ts +++ b/spec/structure/structure_triangular_weir_free.spec.ts @@ -8,7 +8,7 @@ import { StructureFlowMode, StructureFlowRegime } from "../../src/structure/structure"; import { StructureTriangularWeirFree } from "../../src/structure/structure_triangular_weir_free"; -import { TriangularStructureParams } from "../../src/structure/triangular_structure_params"; +import { TriangularStructureParams } from "../../src/structure/structure_triangular_weir_free_params"; import { itCalcQ } from "./functions"; const structPrm: TriangularStructureParams = new TriangularStructureParams(0, 100.1, 100.1, 100, 45, 1.36); diff --git a/src/structure/factory_structure.ts b/src/structure/factory_structure.ts index cb7846e564cddd5ded4412cf430f3cf42ec451d3..302113c65a33764816ee5e2e32a6c578ce5d3349 100644 --- a/src/structure/factory_structure.ts +++ b/src/structure/factory_structure.ts @@ -8,24 +8,28 @@ import { StructureKiviParams } from "./structure_kivi_params"; import { StructureOrificeFree } from "./structure_orifice_free"; import { StructureOrificeSubmerged } from "./structure_orifice_submerged"; import { LoiDebit, StructureProperties, StructureType } from "./structure_props"; +// tslint:disable-next-line:max-line-length +import { StructureTriangularTruncWeirFree, TriangularTruncStructureParams } from "./structure_triangular_trunc_weir_free"; import { StructureTriangularWeirFree, TriangularStructureParams } from "./structure_triangular_weir_free"; import { StructureWeirFree } from "./structure_weir_free"; + 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}; const rectStructPrms: RectangularStructureParams = new RectangularStructureParams( 0, // Q 100, // ZDV 102, // Z1 101.5, // Z2 2, // L - 0.4 // Cd pour un seuil rectangulaire + oCd.SeuilR // Cd pour un seuil rectangulaire // W = Infinity par défaut pour un seuil ); switch (structureType) { case StructureType.VanneRectangulaire: rectStructPrms.W.v = 0.5; - rectStructPrms.Cd.v = 0.6; // Cd pour une vanne rectangulaire + rectStructPrms.Cd.v = oCd.VanneR; // Cd pour une vanne rectangulaire break; case StructureType.SeuilRectangulaire: case StructureType.SeuilTriangulaire: @@ -42,15 +46,15 @@ export function CreateStructure(structureType: StructureType, loiDebit: LoiDebit switch (loiDebit) { case LoiDebit.Cem88d: - rectStructPrms.Cd.v = 0.4; // Cd Cem88d qu'on soit en seuil ou vanne + rectStructPrms.Cd.v = oCd.SeuilR; // Cd Cem88d qu'on soit en seuil ou vanne return new StructureCem88d(rectStructPrms, dbg); case LoiDebit.Cem88v: - rectStructPrms.Cd.v = 0.6; // Cd Cem88d qu'on soit en seuil ou vanne + rectStructPrms.Cd.v = oCd.VanneR; // Cd Cem88d qu'on soit en seuil ou vanne return new StructureCem88v(rectStructPrms, dbg); case LoiDebit.Cunge80: - rectStructPrms.Cd.v = 0.6; // Cd Cunge80 qu'on soit en seuil ou vanne + rectStructPrms.Cd.v = oCd.VanneR; // Cd Cunge80 qu'on soit en seuil ou vanne return new StructureCunge80(rectStructPrms, dbg); case LoiDebit.OrificeFree: @@ -64,26 +68,38 @@ export function CreateStructure(structureType: StructureType, loiDebit: LoiDebit case LoiDebit.KIVI: const structKiviPrm: StructureKiviParams = new StructureKiviParams( - 8.516, // Q - 101, // ZDV - 103, // Z1 - 102, // Z2 - 2, // L - 0.4, // alpha - 0.001, // béta - 100); // ZRAM : cote Radier Amont + 8.516, // Q + 101, // ZDV + 103, // Z1 + 102, // Z2 + 2, // L + oCd.SeuilR, // alpha + 0.001, // béta + 100); // ZRAM : cote Radier Amont return new StructureKivi(structKiviPrm, dbg); - case LoiDebit.TriangularWeirFree: - const triangStructPrms: TriangularStructureParams = new TriangularStructureParams( - 0, // Q + case LoiDebit.TriangularWeirFree: + const structTriangPrms: TriangularStructureParams = new TriangularStructureParams( + 0, // Q + 100, // ZDV + 102, // Z1 + 101.5, // Z2 + 45, // Alpha2 + oCd.SeuilT // Cd pour un seuil triangulaire + // W = Infinity par défaut pour un seuil + ); + return new StructureTriangularWeirFree(structTriangPrms, dbg); + case LoiDebit.TriangularTruncWeirFree: + const structTriTruncPrms: TriangularTruncStructureParams = new TriangularTruncStructureParams( + 0, // Q 100, // ZDV 102, // Z1 101.5, // Z2 - 45, // Alpha2 - 1.36 // Cd pour un seuil triangulaire + 0.9, // BT + 101, // ZT + oCd.SeuilT // Cd pour un seuil triangulaire // W = Infinity par défaut pour un seuil ); - return new StructureTriangularWeirFree(triangStructPrms, dbg); + return new StructureTriangularTruncWeirFree(structTriTruncPrms, dbg); default: throw new Error(`type de LoiDebit ${LoiDebit[loiDebit]} non pris en charge`); diff --git a/src/structure/parallel_structure_params.ts b/src/structure/parallel_structure_params.ts index 71c037a59395b8602aaf2557a00d494eecec529e..40426c827c01707f1bd35ada4052c4eb130ef2fb 100644 --- a/src/structure/parallel_structure_params.ts +++ b/src/structure/parallel_structure_params.ts @@ -1,7 +1,6 @@ -import { Nub } from "../nub"; -import { ParamsEquation } from "../param/params-equation"; import { ParamDefinition } from "../param/param-definition"; import { ParamDomainValue } from "../param/param-domain"; +import { ParamsEquation } from "../param/params-equation"; /** * Common parameters of hydraulic structure equations diff --git a/src/structure/rectangular_structure.ts b/src/structure/rectangular_structure.ts index da1956dc03148990cfa8b4b4fcbcccbf174ad72f..d127725e6d4a0643ce1ee87ad18c2ad886483b6c 100644 --- a/src/structure/rectangular_structure.ts +++ b/src/structure/rectangular_structure.ts @@ -20,6 +20,13 @@ export abstract class RectangularStructure extends Structure { return this._prms as RectangularStructureParams; } + /** + * 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; + } + /** * paramétrage de la calculabilité des paramètres */ diff --git a/src/structure/structure.ts b/src/structure/structure.ts index 69ce4fea56d0962496d4b83b722be91fc48254d4..8965a98e88998f5072715bb6c92c961b4df3985e 100644 --- a/src/structure/structure.ts +++ b/src/structure/structure.ts @@ -67,6 +67,11 @@ export abstract class Structure extends Nub { return this._prms as StructureParams; } + /** + * Calcul de l'aire d'écoulement sur le seuil ou dans l'orifice + */ + public abstract calcA(): number; + /** * Calcul d'une équation quelque soit l'inconnue à calculer. * Gestion du débit nul et de l'inversion de débit diff --git a/src/structure/structure_kivi.ts b/src/structure/structure_kivi.ts index 6df85dd19b29c59246d92d38d3bfb705b06259db..e1bade6082007e4557476505f40156c0785a2c0a 100644 --- a/src/structure/structure_kivi.ts +++ b/src/structure/structure_kivi.ts @@ -52,6 +52,13 @@ 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; + } + protected getFlowRegime(): StructureFlowRegime { if (this.prms.h2.v > 0) { return StructureFlowRegime.SUBMERGED; diff --git a/src/structure/structure_props.ts b/src/structure/structure_props.ts index 114be3ac50472415209349efe33b2b3161ea2538..e8bc5aa5c6e2900d291f8ed403a6045ce19cc95a 100644 --- a/src/structure/structure_props.ts +++ b/src/structure/structure_props.ts @@ -20,7 +20,9 @@ export enum LoiDebit { // Loi Kindsvater-Carter et Villemonte KIVI, // Loi de débit seuil triangulaire dénoyé - TriangularWeirFree + TriangularWeirFree, + // Loi de débit seuil triangulaire tronqué + TriangularTruncWeirFree } export const loiAdmissibles: { [key: string]: LoiDebit[] } = { @@ -29,7 +31,7 @@ export const loiAdmissibles: { [key: string]: LoiDebit[] } = { LoiDebit.KIVI ], SeuilTriangulaire: [ - LoiDebit.TriangularWeirFree + LoiDebit.TriangularWeirFree, LoiDebit.TriangularTruncWeirFree ], VanneRectangulaire: [ LoiDebit.Cem88d, LoiDebit.Cem88v, LoiDebit.Cunge80, LoiDebit.OrificeFree, diff --git a/src/structure/structure_triangular_trunc_weir_free.ts b/src/structure/structure_triangular_trunc_weir_free.ts index 93cb309e0d73eb454ce868e4874a987079ea8507..c3a6a21f3f8f136fc8d7898f2626c74e6153666c 100644 --- a/src/structure/structure_triangular_trunc_weir_free.ts +++ b/src/structure/structure_triangular_trunc_weir_free.ts @@ -1,6 +1,7 @@ +import { ParamCalculability } from "../param/param-definition"; import { Result } from "../util/result"; import { Structure, StructureFlowMode, StructureFlowRegime } from "./structure"; -import { TriangularTruncStructureParams } from "./triangular_trunc_structure_params"; +import { TriangularTruncStructureParams } from "./structure_triangular_trunc_weir_free_params"; export { TriangularTruncStructureParams }; @@ -28,7 +29,7 @@ export class StructureTriangularTruncWeirFree extends Structure { Structure.CheckEquation(sVarCalc); const data = this.getResultData(); - let v: number = this.prms.Cd.v * this.prms.B2.v / (this.prms.ZT.v - this.prms.ZDV.v); + let v: number = this.prms.Cd.v * this.prms.BT.v / (this.prms.ZT.v - this.prms.ZDV.v); if (this.prms.Z1.v <= this.prms.ZT.v) { v = v * Math.pow(this.prms.h1.v, 2.5); } else { @@ -38,6 +39,20 @@ export class StructureTriangularTruncWeirFree extends Structure { return new Result(v, data); } + /** + * Calcul de l'aire d'écoulement sur le seuil + */ + public calcA(): number { + if (this.prms.Z1.v <= this.prms.ZT.v) { + const h: number = Math.max(this.prms.h1.v, this.prms.h2.v); + return h * h * this.prms.BT.v / (this.prms.ZT.v - this.prms.ZDV.v); + } else { + const Z: number = Math.max(this.prms.Z1.v, this.prms.Z2.v); + return this.prms.BT.v * (this.prms.ZT.v - this.prms.ZDV.v) + + 2 * this.prms.BT.v * (Z - this.prms.ZT.v); + } + } + protected getFlowRegime() { return StructureFlowRegime.FREE; } @@ -46,4 +61,14 @@ export class StructureTriangularTruncWeirFree extends Structure { return StructureFlowMode.WEIR; } + /** + * paramétrage de la calculabilité des paramètres + */ + protected setParametersCalculability() { + super.setParametersCalculability(); + this.prms.BT.calculability = ParamCalculability.DICHO; + this.prms.ZT.calculability = ParamCalculability.DICHO; + this.prms.Cd.calculability = ParamCalculability.DICHO; + } + } diff --git a/src/structure/triangular_trunc_structure_params.ts b/src/structure/structure_triangular_trunc_weir_free_params.ts similarity index 84% rename from src/structure/triangular_trunc_structure_params.ts rename to src/structure/structure_triangular_trunc_weir_free_params.ts index bed29fa150dd3b08851f664a8ad48b992f17a4f2..81fc59fc21b39b37fa31e8f107ed4cde78c5d03d 100644 --- a/src/structure/triangular_trunc_structure_params.ts +++ b/src/structure/structure_triangular_trunc_weir_free_params.ts @@ -7,7 +7,7 @@ import { StructureParams } from "./structure_params"; */ export class TriangularTruncStructureParams extends StructureParams { /** Demi-ouverture du triangle (m) */ - public B2: ParamDefinition; + public BT: ParamDefinition; /** Cote haute du triangle (m) */ public ZT: ParamDefinition; @@ -22,18 +22,18 @@ export class TriangularTruncStructureParams extends StructureParams { * @param rZDV Cote de la crête du déversoir ou du radier de la vanne (m) * @param rZ1 Cote de l'eau amont (m) * @param rZ2 Cote de l'eau aval (m) - * @param rB2 Demi-ouverture du triangle (m) + * @param rBT Demi-ouverture du triangle (m) * @param rZT Cote haute du triangle (m) * @param rCd Coefficient de débit (-) * @param rW Ouverture de la vanne (m) (Valeur par défaut +infinity pour les déversoirs) */ constructor( rQ: number, rZDV: number, rZ1: number, rZ2: number, - rB2: number, rZT: number, rCd: number, rW: number = Infinity + rBT: number, rZT: number, rCd: number, rW: number = Infinity ) { super(rQ, rZDV, rZ1, rZ2, rW); - this.B2 = new ParamDefinition("B2", ParamDomainValue.POS, rB2); - this.addParamDefinition(this.B2); + this.BT = new ParamDefinition("BT", ParamDomainValue.POS, rBT); + this.addParamDefinition(this.BT); this.ZT = new ParamDefinition("ZT", ParamDomainValue.POS, rZT); this.addParamDefinition(this.ZT); this.Cd = new ParamDefinition("Cd", ParamDomainValue.POS, rCd); diff --git a/src/structure/structure_triangular_weir_free.ts b/src/structure/structure_triangular_weir_free.ts index fc87d58a999c1f37c20a9df5e3d40e820f9cd1dd..beb63a2b7c9236e0357da08f1f0d0b2aa0c2d49a 100644 --- a/src/structure/structure_triangular_weir_free.ts +++ b/src/structure/structure_triangular_weir_free.ts @@ -1,14 +1,26 @@ +import { ParamCalculability } from "../param/param-definition"; import { Result } from "../util/result"; import { Structure, StructureFlowMode, StructureFlowRegime } from "./structure"; -import { TriangularStructure } from "./triangular_structure"; -import { TriangularStructureParams } from "./triangular_structure_params"; +import { TriangularStructureParams } from "./structure_triangular_weir_free_params"; export { TriangularStructureParams }; /** * Equation classique seuil triangulaire dénoyé */ -export class StructureTriangularWeirFree extends TriangularStructure { +export class StructureTriangularWeirFree extends Structure { + + constructor(prms: TriangularStructureParams, dbg: boolean = false) { + super(prms, dbg); + } + + /** + * paramètres castés au bon type + */ + get prms(): TriangularStructureParams { + return this._prms as TriangularStructureParams; + } + /** * Calcul analytique Q = f(Cd, L, h1, h2, W) seuil dénoyé * @param sVarCalc Variable à calculer (doit être "Q") @@ -23,6 +35,13 @@ export class StructureTriangularWeirFree extends TriangularStructure { return new Result(v, data); } + /** + * Calcul de l'aire d'écoulement sur le seuil + */ + public calcA(): number { + return Math.pow(Math.max(this.prms.h1.v, this.prms.h2.v), 2) * this.getTanFromDegrees(this.prms.alpha2.v); + } + protected getFlowRegime() { return StructureFlowRegime.FREE; } @@ -37,5 +56,14 @@ export class StructureTriangularWeirFree extends TriangularStructure { */ protected getTanFromDegrees(degrees: number) { return Math.tan(degrees * Math.PI / 180); - } + } + + /** + * paramétrage de la calculabilité des paramètres + */ + protected setParametersCalculability() { + super.setParametersCalculability(); + this.prms.alpha2.calculability = ParamCalculability.DICHO; + this.prms.Cd.calculability = ParamCalculability.DICHO; + } } diff --git a/src/structure/triangular_structure_params.ts b/src/structure/structure_triangular_weir_free_params.ts similarity index 100% rename from src/structure/triangular_structure_params.ts rename to src/structure/structure_triangular_weir_free_params.ts diff --git a/src/structure/triangular_structure.ts b/src/structure/triangular_structure.ts deleted file mode 100644 index 3ff33cb7ae4d287c7f0e6cfe235972c37ea63f7e..0000000000000000000000000000000000000000 --- a/src/structure/triangular_structure.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { ParamCalculability } from "../param/param-definition"; -import { Structure } from "./structure"; -import { TriangularStructureParams } from "./triangular_structure_params"; - -export { TriangularStructureParams }; - -/** - * Classe mère pour toutes les structures ayant une base rectangulaire (vannes, seuils) - */ -export abstract class TriangularStructure extends Structure { - - constructor(prms: TriangularStructureParams, dbg: boolean = false) { - super(prms, dbg); - } - - /** - * paramètres castés au bon type - */ - get prms(): TriangularStructureParams { - return this._prms as TriangularStructureParams; - } - - /** - * paramétrage de la calculabilité des paramètres - */ - protected setParametersCalculability() { - super.setParametersCalculability(); - this.prms.alpha2.calculability = ParamCalculability.DICHO; - this.prms.Cd.calculability = ParamCalculability.DICHO; - } - -}