An error occurred while loading the file. Please try again.
-
Mathias Chouet authoreda9dfdc1e
import { CalculatorType } from "../compute-node";
import { PabPuissance, PabPuissanceParams } from "../pab/pab_puissance";
import { ParamCalculability } from "../param/param-definition";
import { Result } from "../util/result";
import { CloisonsParams } from "./cloisons_params";
import { ParallelStructure } from "./parallel_structure";
import { StructureKiviParams } from "./structure_kivi";
import { loiAdmissiblesCloisons, LoiDebit } from "./structure_props";
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;
}
/**
* 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 {
// Mise à jour de ZRAM pour Kivi à partir de Z1 - PB
this.updateKiviZRAM();
// Transformation DH => Z2
this.prms.Z2.v = this.prms.Z1.v - this.prms.DH.v;
let sVC: string = sVarCalc;
if (sVarCalc === "DH") {
sVC = "Z2";
}
// let r: Result = super.Calc(sVC, rInit);
let r: Result;
switch (sVC) {
case "Z1":
case "Z2":
case "Q":
case "LB":
case "PB":
case "BB":
r = this.nubCalc(sVC, rInit);
if (r.ok) {
this.getParameter(sVC).setValue(r.vCalc);
}
break;
default:
r = super.Calc(sVC, rInit);
}
if (r.ok) {
// Recalcul du débit total pour récupérer les résultats des ouvrages dans les résultats complémentaires
const resQtot: Result = this.CalcQ();
for (const extraResKey in resQtot.extraResults) {
if (resQtot.extraResults.hasOwnProperty(extraResKey)) {
r.resultElement.addExtraResult(extraResKey, resQtot.extraResults[extraResKey]);
}
}
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
}
// 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.getcalculatedparams(sVarCalc, r);
const puissanceNub: PabPuissance = new PabPuissance(
new PabPuissanceParams(
prms.DH,
prms.Q,
prms.LB * prms.BB * prms.PB
)
);
r.extraResults.PV = puissanceNub.Calc("PV", 0).vCalc;
// Ajout de la cote de radier
r.extraResults.ZB = prms.Z1 - prms.DH - prms.PB;
return r;
}
/**
* 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;
}
protected getcalculatedparams(sVarCalc: string, result: Result): { [key: string]: number } {
const cPrms: { [key: string]: number } = {};
for (const p of this.parameterIterator) {
if (p.symbol === sVarCalc) {
cPrms[p.symbol] = result.vCalc;
} else {
cPrms[p.symbol] = p.v;
}
}
return cPrms;
}
private updateKiviZRAM() {
for (const structure of this.structures) {
if (structure.prms instanceof StructureKiviParams) {
structure.prms.ZRAM.v = this.prms.Z1.v - this.prms.PB.v;
}
}
}
}