An error occurred while loading the file. Please try again.
-
Dorchies David authored
#33 Structure: Better management of discharge inversion. PAB tests are better for discharge calculation but still wrong.
b89e41a6
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_params";
import { Villemonte } from "./villemonte";
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 CalcQ(): Result {
const data = this.getResultData();
let Q: 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) {
Q = Q * Math.pow(this.prms.h1.v, 2.5);
} else {
Q = Q * (Math.pow(this.prms.h1.v, 2.5) - Math.pow(this.prms.Z1.v - this.prms.ZT.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 {
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() {
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;
}
7172737475767778798081828384858687888990
return StructureFlowRegime.SUBMERGED;
}
}
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;
}
}