Forked from HYCAR-Hydro / airGR
Source project has a limited visibility.
structure_triangular_trunc_weir_free.ts 2.48 KiB
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();
71727374757677
this.prms.BT.calculability = ParamCalculability.DICHO; this.prms.ZT.calculability = ParamCalculability.DICHO; this.prms.Cd.calculability = ParamCalculability.DICHO; } }