import { ParamCalculability } from "../param/param-definition"; import { Result } from "../util/result"; import { Structure, StructureFlowMode, StructureFlowRegime } from "./structure"; import { LoiDebit } from "./structure_props"; import { TriangularTruncStructureParams } from "./structure_triangular_trunc_weir_free_params"; export { TriangularTruncStructureParams }; /** * Equation classique seuil triangulaire dénoyé */ export class StructureTriangularTruncWeirFree extends Structure { constructor(prms: TriangularTruncStructureParams, dbg: boolean = false) { super(prms, dbg); this._loiDebit = LoiDebit.TriangularTruncWeirFree; } /** * paramètres castés au bon type */ get prms(): TriangularTruncStructureParams { return this._prms as TriangularTruncStructureParams; } /** * 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(); 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 { v = v * (Math.pow(this.prms.h1.v, 2.5) - Math.pow(this.prms.Z1.v - this.prms.ZT.v, 2.5)); } return new Result(v, this, 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; } protected getFlowMode() { 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; } }