Forked from HYCAR-Hydro / airGR
Source project has a limited visibility.
pab_chute.ts 2.93 KiB
import { CalculatorType } from "../compute-node";
import { Nub } from "../nub";
import { ParamCalculability, ParamDefinition, ParamFamily } from "../param/param-definition";
import { ParamDomainValue } from "../param/param-domain";
import { ParamsEquation } from "../param/params-equation";
import { Message, MessageCode } from "../util/message";
import { Result } from "../util/result";
export class PabChuteParams extends ParamsEquation {
    [key: string]: any; // pour pouvoir faire this['methode']();
    /** Cote amont Z1 */
    private _Z1: ParamDefinition;
    /** Cote aval Z2 */
    private _Z2: ParamDefinition;
    /** Chute DH */
    private _DH: ParamDefinition;
    constructor(rZ1: number, rZ2: number, rDH: number) {
        super();
        this._Z1 = new ParamDefinition(this, "Z1", ParamDomainValue.ANY, rZ1, ParamFamily.ELEVATIONS);
        this._Z2 = new ParamDefinition(this, "Z2", ParamDomainValue.ANY, rZ2, ParamFamily.ELEVATIONS);
        this._DH = new ParamDefinition(this, "DH", ParamDomainValue.POS_NULL, rDH, ParamFamily.TOTALFALLS);
        this.addParamDefinition(this._Z1);
        this.addParamDefinition(this._Z2);
        this.addParamDefinition(this._DH);
    get Z1() {
        return this._Z1;
    get Z2() {
        return this._Z2;
    get DH() {
        return this._DH;
// tslint:disable-next-line:max-classes-per-file
export class PabChute extends Nub {
    constructor(prms: PabChuteParams, dbg: boolean = false) {
        super(prms, dbg);
        this._calcType = CalculatorType.PabChute;
        this._defaultCalculatedParam = prms.DH;
        this.resetDefaultCalculatedParam();
    /**
     * paramètres castés au bon type
    get prms(): PabChuteParams {
        return this._prms as PabChuteParams;
    public Equation(sVarCalc: string): Result {
        let v: number;
        if (! [ "Z1", "Z2" ].includes(sVarCalc) && this.prms.Z1.v <= this.prms.Z2.v) {
            const m = new Message(MessageCode.ERROR_ELEVATION_ZI_LOWER_THAN_Z2);
            m.extraVar.Z1 = this.prms.Z1.v;
            m.extraVar.Z2 = this.prms.Z2.v;
            return new Result(m);
7172737475767778798081828384858687888990919293949596979899100101
switch (sVarCalc) { case "Z1": v = this.prms.Z2.v + this.prms.DH.v; break; case "Z2": v = this.prms.Z1.v - this.prms.DH.v; break; case "DH": v = this.prms.Z1.v - this.prms.Z2.v; break; default: throw new Error("PabChute.Equation() : invalid variable name " + sVarCalc); } return new Result(v, this); } /** * paramétrage de la calculabilité des paramètres */ protected setParametersCalculability() { this.prms.Z1.calculability = ParamCalculability.EQUATION; this.prms.Z2.calculability = ParamCalculability.EQUATION; this.prms.DH.calculability = ParamCalculability.EQUATION; } }