jalhyd
Version:
JaLHyd, a Javascript Library for Hydraulics
169 lines • 6.86 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Cloisons = void 0;
const internal_modules_1 = require("../internal_modules");
const internal_modules_2 = require("../internal_modules");
const internal_modules_3 = require("../internal_modules");
const internal_modules_4 = require("../internal_modules");
const internal_modules_5 = require("../internal_modules");
const internal_modules_6 = require("../internal_modules");
const internal_modules_7 = require("../internal_modules");
class Cloisons extends internal_modules_4.ParallelStructure {
constructor(prms, dbg = false) {
super(prms, dbg);
this.setCalculatorType(internal_modules_1.CalculatorType.Cloisons);
this._intlType = "Cloison";
}
/**
* paramètres castés au bon type
*/
get prms() {
return this._prms;
}
getLoisAdmissibles() {
return internal_modules_6.loiAdmissiblesCloisons;
}
/**
* Is the Nub used in a PAB?
*/
get isInPAB() {
return (this.parent !== undefined && this.parent instanceof internal_modules_2.Pab);
}
Equation(sVarCalc) {
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
*/
Calc(sVarCalc, rInit) {
let sVC = sVarCalc;
if (sVarCalc === "DH") {
sVC = "Z2";
rInit = this.prms.Z1.v - this.prms.DH.v;
}
this.updatePrms();
const r = 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 = 1000; // masse volumique de l'eau en kg/m3
const g = 9.81; // accélération de la gravité terrestre en m/s2.
r.resultElement.values.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.resultElement.values.ZRMB = this.prms.ZRMB.v;
r.resultElement.values.ZRAM = this.prms.ZRAM.v;
// Ajout de ZDV pour les seuils
for (const s of this.structures) {
if (s.prms.h1.visible) {
s.result.resultElement.addExtraResult("ZDV", this.prms.Z1.v - s.prms.h1.v);
}
// calcul de la pelle
if (s.getPropValue("loiDebit") !== internal_modules_6.LoiDebit.OrificeSubmerged) {
const pelle = s.prms.ZDV.v - this.prms.ZRAM.v;
s.result.resultElement.values.P = pelle;
if (pelle < -1E-7) { // si c'est enfoncé d'un dixième de micron ça va
const m = new internal_modules_7.Message(internal_modules_7.MessageCode.WARNING_NEGATIVE_SILL);
s.result.resultElement.log.add(m);
// merge in parent for GUI display
this.result.resultElement.log.add(m);
}
}
}
// Ajout de la charge aval et de l'ennoiement pour tous les ouvrages sauf les orifices
for (const st of this.structures) {
if (!st.isOrifice) {
const h1 = st.prms.h1.v;
const h2 = st.prms.h2.v;
st.result.resultElement.addExtraResult("H2", h2);
st.result.resultElement.addExtraResult("SUBMERGENCE", internal_modules_2.Structure.computeSubmergencePercentage(h1, h2));
}
}
return r;
}
adjustChildParameters(child) {
const prms = child.prms;
if (!this.isInPAB && prms.ZDV.visible) {
// Dans le contexte hors PAB
// 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 internal_modules_5.StructureKiviParams) {
// hide ZRAM for KIVI, in Cloisons and PAB context only
child.prms.ZRAM.visible = false;
}
}
/**
* paramétrage de la calculabilité des paramètres
*/
setParametersCalculability() {
super.setParametersCalculability();
this.prms.LB.calculability = internal_modules_3.ParamCalculability.FREE;
this.prms.BB.calculability = internal_modules_3.ParamCalculability.FREE;
this.prms.PB.calculability = internal_modules_3.ParamCalculability.FREE;
this.prms.DH.calculability = internal_modules_3.ParamCalculability.DICHO;
this.prms.Z1.calculability = internal_modules_3.ParamCalculability.FREE;
this.prms.ZRMB.calculability = internal_modules_3.ParamCalculability.FREE;
this.prms.ZRAM.calculability = internal_modules_3.ParamCalculability.FREE;
this.prms.QA.calculability = internal_modules_3.ParamCalculability.FREE;
}
static resultsUnits() {
return Cloisons._resultsUnits;
}
exposeResults() {
this._resultsFamilies = {
PV: undefined,
ZRAM: undefined,
ZRMB: undefined,
P: undefined
};
}
updatePrms() {
if (this.prms.DH.visible !== false) {
// 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 internal_modules_5.StructureKiviParams) {
structure.prms.ZRAM.v = this.prms.Z1.v - this.prms.PB.v;
}
}
}
}
}
exports.Cloisons = Cloisons;
/**
* { symbol => string } map that defines units for extra results
*/
Cloisons._resultsUnits = {
PV: "W/m³",
ZRAM: "m",
ZRMB: "m",
Q: "m³/s",
YMOY: "m",
ZDV: "m",
P: "m",
H2: "m",
SUBMERGENCE: "%"
};
//# sourceMappingURL=cloisons.js.map