jalhyd
Version:
JaLHyd, a Javascript Library for Hydraulics
137 lines • 5.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Dever = 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 Dever extends internal_modules_6.ParallelStructure {
constructor(prms, dbg = false) {
super(prms, dbg);
this.setCalculatorType(internal_modules_1.CalculatorType.Dever);
}
/**
* paramètres castés au bon type
*/
get prms() {
return this._prms;
}
getLoisAdmissibles() {
return internal_modules_7.loiAdmissiblesDever;
}
/**
* 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", "Z2"
* ou { uid: "abcdef", symbol: "X" } avec "abcdef" l'index de l'ouvrage et "X" son paramètre
* @param rInit Valeur initiale
*/
Calc(sVarCalc, rInit) {
if (["Q", "Z1"].includes(sVarCalc)) {
this.bQcorrected = true;
}
else {
this.bQcorrected = false;
}
this.bZcorrected = true;
this.prms.Q.v = (this.prms.Q.V !== undefined && !isNaN(this.prms.Q.V)) ? this.prms.Q.V : 0;
const r = super.Calc(sVarCalc, rInit);
if (!r.ok) {
return r;
}
const QT = this.prms.Q.V;
// Vérifier que les cotes de radier des ouvrages ne sont pas sous la cote de fond du lit
for (const s of this.structures) {
if (s.prms.ZDV.v < this.prms.ZR.v) {
const m = new internal_modules_4.Message(internal_modules_4.MessageCode.WARNING_DEVER_ZDV_INF_ZR);
m.extraVar.number = String(s.findPositionInParent() + 1); // String to avoid decimals
r.resultElement.addMessage(m);
}
}
if (this.prms.Z1.v > this.prms.ZR.v) {
// Vitesse dans le cours d'eau amont
r.resultElement.values.V = QT / (this.prms.BR.v * (this.prms.Z1.v - this.prms.ZR.v));
// Energie cinétique dans le cours d'eau amont
r.resultElement.values.Ec = r.resultElement.values.V * r.resultElement.values.V / (2 * 9.81);
// Calcul de Cv
this.bZcorrected = false;
const Q0 = super.CalcQ().vCalc;
r.resultElement.values.Cv = (Q0 > 0) ? QT / Q0 : 1;
}
else {
r.resultElement.addMessage(new internal_modules_4.Message(internal_modules_4.MessageCode.WARNING_DEVER_ZR_SUP_Z1));
}
return r;
}
/**
* Calcul de la somme des débits de chaque structure
* @param iExcept Index de la structure à ne pas additionner (optionnel)
*/
CalcQ(iExcept) {
if (this.bQcorrected) {
let r;
let i = internal_modules_3.SessionSettings.maxIterations;
do {
if (r === null || r === void 0 ? void 0 : r.ok) {
this.prms.Q.v = r.vCalc;
}
r = super.CalcQ(iExcept);
i--;
} while (i && Math.abs(r.vCalc - this.prms.Q.v) > internal_modules_3.SessionSettings.precision);
if (i === 0) {
r = new internal_modules_5.Result(new internal_modules_4.Message(internal_modules_4.MessageCode.ERROR_DICHO_CONVERGE, { lastApproximation: r.vCalc }));
}
return r;
}
else {
return super.CalcQ(iExcept);
}
}
/**
* Mise à jour de Z1, h1 pour tous les ouvrages
*/
updateStructuresH1H2() {
if (this.bZcorrected) {
for (const structure of this.structures) {
const rEc = (this.prms.Z1.v - this.prms.ZR.v > 0) ?
0.5 * this.prms.Q.v / ((this.prms.Z1.v - this.prms.ZR.v) * this.prms.BR.v * 9.81) : 0;
structure.prms.Z1.v = this.prms.Z1.v + rEc;
structure.prms.Z2.v = this.prms.Z2.v;
structure.prms.update_h1h2();
}
}
else {
super.updateStructuresH1H2();
}
}
setParametersCalculability() {
super.setParametersCalculability();
this.prms.BR.calculability = internal_modules_2.ParamCalculability.FREE;
this.prms.ZR.calculability = internal_modules_2.ParamCalculability.FREE;
// On supprime Z2 de l'interface car régime dénoyé uniquement
this.prms.Z2.calculability = internal_modules_2.ParamCalculability.FIXED;
this.prms.Z2.visible = false;
}
static resultsUnits() {
return Dever._resultsUnits;
}
exposeResults() {
this._resultsFamilies = {
V: undefined,
Ec: undefined,
Cv: undefined
};
}
}
exports.Dever = Dever;
/**
* { symbol => string } map that defines units for extra results
*/
Dever._resultsUnits = {
Ec: "m",
V: "m/s"
};
//# sourceMappingURL=dever.js.map