import { ParamCalculability } from "../param/param-definition"; import { Result } from "../util/result"; import { Structure, StructureFlowMode, StructureFlowRegime } from "./structure"; import { LoiDebit } from "./structure_props"; import { TriangularStructureParams } from "./structure_triangular_weir_params"; import { Villemonte } from "./villemonte"; export { TriangularStructureParams }; /** * Equation classique seuil triangulaire + Ennoiement Villemonte */ export class StructureTriangularWeir extends Structure { constructor(prms: TriangularStructureParams, dbg: boolean = false) { super(prms, dbg); this._loiDebit = LoiDebit.TriangularWeirFree; } /** * 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") */ public CalcQ(): Result { const data = this.getResultData(); let Q = this.prms.Cd.v * this.getTanFromDegrees(this.prms.alpha2.v) * Math.pow(this.prms.h1.v, 2.5); if (data.ENUM_StructureFlowRegime !== StructureFlowRegime.FREE) { Q = Villemonte(this.prms.h1.v, this.prms.h2.v, 2.5) * Q; } return new Result(Q, this, 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() { if (this.prms.Z2.v <= this.prms.ZDV.v) { return StructureFlowRegime.FREE; } else { // La réduction de débit s'applique dès que Z2 > ZDV (Villemonte, 1946) if (this.prms.h2.v < 4 / 5 * this.prms.h1.v) { // Yc = 4 / 5 * H1 (Jameson, 1925) return StructureFlowRegime.PARTIAL; } return StructureFlowRegime.SUBMERGED; } } protected getFlowMode() { return StructureFlowMode.WEIR; } /** * Compute Tangent with angle in degrees * @param degrees Angle (degrees) */ 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; } }