An error occurred while loading the file. Please try again.
-
Dorchies David authored7bcad6db
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;
}
}
}
}
}