From 3538e2d0ff1052245c316988e31a79bde0153f2e Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@irstea.fr> Date: Wed, 20 Jun 2018 11:00:50 +0200 Subject: [PATCH] =?UTF-8?q?#29=20Debuggage=20equation=20seuil=20triangulai?= =?UTF-8?q?re=20tronqu=C3=A9=20+=20calcul=20de=20l'aire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spec/structure/parallel_structure.spec.ts | 1 - spec/structure/structure_test.ts | 7 +++ ...ructure_triangular_trunc_weir_free.spec.ts | 2 +- .../structure_triangular_weir_free.spec.ts | 2 +- src/structure/factory_structure.ts | 54 ++++++++++++------- src/structure/parallel_structure_params.ts | 3 +- src/structure/rectangular_structure.ts | 7 +++ src/structure/structure.ts | 5 ++ src/structure/structure_kivi.ts | 7 +++ src/structure/structure_props.ts | 6 ++- .../structure_triangular_trunc_weir_free.ts | 29 +++++++++- ...ture_triangular_trunc_weir_free_params.ts} | 10 ++-- .../structure_triangular_weir_free.ts | 36 +++++++++++-- ... structure_triangular_weir_free_params.ts} | 0 src/structure/triangular_structure.ts | 32 ----------- 15 files changed, 132 insertions(+), 69 deletions(-) rename src/structure/{triangular_trunc_structure_params.ts => structure_triangular_trunc_weir_free_params.ts} (84%) rename src/structure/{triangular_structure_params.ts => structure_triangular_weir_free_params.ts} (100%) delete mode 100644 src/structure/triangular_structure.ts diff --git a/spec/structure/parallel_structure.spec.ts b/spec/structure/parallel_structure.spec.ts index 8a4d442f..d7bf22a2 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 6ff1af5f..fd9a2a1b 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 f11fc424..44f88359 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 c16821a8..849811d4 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 cb7846e5..302113c6 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 71c037a5..40426c82 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 da1956dc..d127725e 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 69ce4fea..8965a98e 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 6df85dd1..e1bade60 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 114be3ac..e8bc5aa5 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 93cb309e..c3a6a21f 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 bed29fa1..81fc59fc 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 fc87d58a..beb63a2b 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 3ff33cb7..00000000 --- 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; - } - -} -- GitLab