cloisons.ts 4.82 KiB
import { CalculatorType } from "../compute-node";
import { Nub } from "../index";
import { ParamCalculability } from "../param/param-definition";
import { ParallelStructure } from "../structure/parallel_structure";
import { StructureParams } from "../structure/structure";
import { StructureKiviParams } from "../structure/structure_kivi";
import { loiAdmissiblesCloisons, LoiDebit } from "../structure/structure_props";
import { Result } from "../util/result";
import { CloisonsParams } from "./cloisons_params";
export { CloisonsParams };
export class Cloisons extends ParallelStructure {
    constructor(prms: CloisonsParams, dbg: boolean = false) {
        super(prms, dbg);
        this._calcType = CalculatorType.Cloisons;
    /**
     * paramètres castés au bon type
    get prms(): CloisonsParams {
        return this._prms as CloisonsParams;
    public getLoisAdmissibles(): { [key: string]: LoiDebit[]; } {
        return loiAdmissiblesCloisons;
    public Equation(sVarCalc: string): Result {
        this.updatePrms();
        return super.Equation(sVarCalc);
    /**
     * Calcul du débit total, de la cote amont ou aval ou d'un paramètre d'une structure
     * @param sVarCalc Nom du paramètre à calculer :
     *                 "Q", "Z1", "DH" ou "n.X" avec "n" l'index de l'ouvrage et "X" son paramètre
     * @param rInit Valeur initiale
    public Calc(sVarCalc: string, rInit?: number): Result {
        let sVC: string = sVarCalc;
        if (sVarCalc === "DH") {
            sVC = "Z2";
            rInit = this.prms.Z1.v - this.prms.DH.v;
        this.updatePrms();
        const r: Result = super.Calc(sVC, rInit);
        if (!r.ok) { // Error during calculation
            return r;
        // Transformation Z2 => DH
        if (sVarCalc === "DH") {
            r.vCalc = this.prms.Z1.v - r.vCalc;
        // Ajout du calcul de la puissance dissipée
        const prms = this.getParamValuesAfterCalc(sVarCalc, r);
        const ro: number = 1000;     // masse volumique de l'eau en kg/m3
        const g: number = 9.81;     // accélération de la gravité terrestre en m/s2.
        r.extraResults.PV = ro * g * this.prms.Q.v * (prms.Z1 - prms.Z2) / (prms.LB * prms.BB * prms.PB);
        // Ajout de la cote de radier de bassin
        r.extraResults.ZRMB = this.prms.ZRMB.v;
        r.extraResults.ZRAM = this.prms.ZRAM.v;
        // Ajout de ZDV pour les seuils
        for (let i = 0; i < this.structures.length; i++) {
            if (this.structures[i].prms.h1.visible) {
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
r.resultElement.addExtraResult(`ouvrage[${i}].ZDV`, this.structures[i].prms.ZDV.v); } } return r; } public adjustChildParameters(child: Nub) { const prms = child.prms as StructureParams; if (this.prms.DH.calculability !== ParamCalculability.NONE && prms.ZDV.visible) { // Dans le contexte hors PAB (DH.calculability !== ParamCalculability.NONE) // Pour les seuils (i.e. Structures avec cote de radier de seuil) // on remplace ZDV par h1 la charge sur le seuil prms.h1.visible = true; prms.ZDV.visible = false; } if (child.prms instanceof StructureKiviParams) { // hide ZRAM for KIVI, in Cloisons and PAB context only child.prms.ZRAM.visible = false; } } /** * paramétrage de la calculabilité des paramètres */ protected setParametersCalculability() { super.setParametersCalculability(); this.prms.LB.calculability = ParamCalculability.FREE; this.prms.BB.calculability = ParamCalculability.FREE; this.prms.PB.calculability = ParamCalculability.FREE; this.prms.DH.calculability = ParamCalculability.DICHO; this.prms.Z1.calculability = ParamCalculability.FREE; } private updatePrms() { if (this.prms.DH.calculability !== ParamCalculability.NONE) { // if NONE => PAB context. it doesn't need update of elevations if (this.calculatedParam !== this.prms.DH) { // Z2 is the variable to find if DH is the calculated param this.prms.Z2.v = this.prms.Z1.v - this.prms.DH.v; } this.prms.ZRMB.v = this.prms.Z1.v - this.prms.PB.v - this.prms.DH.v; this.prms.ZRAM.v = this.prms.ZRMB.v + this.prms.DH.v / 2; for (const structure of this.structures) { const prms = structure.prms; if (prms.h1.visible) { // MAJ de ZDV des seuils à partir de la charge prms.ZDV.v = this.prms.Z1.v - prms.h1.v; } if (structure.prms instanceof StructureKiviParams) { structure.prms.ZRAM.v = this.prms.Z1.v - this.prms.PB.v; } } } } }