jalhyd
Version:
JaLHyd, a Javascript Library for Hydraulics
228 lines • 9.42 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Par = exports.ParType = 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");
const internal_modules_8 = require("../internal_modules");
const internal_modules_9 = require("../internal_modules");
const internal_modules_10 = require("../internal_modules");
const internal_modules_11 = require("../internal_modules");
/** Type de Passe à Ralentisseurs */
var ParType;
(function (ParType) {
ParType[ParType["PLANE"] = 0] = "PLANE";
ParType[ParType["FATOU"] = 1] = "FATOU";
ParType[ParType["SUPERACTIVE"] = 2] = "SUPERACTIVE";
ParType[ParType["CHEVRON"] = 3] = "CHEVRON";
})(ParType = exports.ParType || (exports.ParType = {}));
class Par extends internal_modules_11.FishPass {
constructor(prms, dbg = false) {
super(prms, dbg);
this.setCalculatorType(internal_modules_1.CalculatorType.Par);
this._defaultCalculatedParam = prms.Q;
this.resetDefaultCalculatedParam();
this._props.addObserver(this);
this.parType = ParType.PLANE;
}
get prms() {
return this._prms;
}
get parType() {
return this.getPropValue("parType");
}
set parType(e) {
this.setPropValue("parType", e);
}
Calc(sVarCalc, rInit) {
// possible error result
const r = new internal_modules_3.Result(new internal_modules_9.ResultElement());
let hasError = false;
// if P is given and L is not calculated, check P value
if (this.calculatedParam !== this.prms.L && this.prms.P.v !== undefined) {
const standardP = this.parCalc.CalcP();
const minP = standardP * 0.9;
const maxP = standardP * 1.05;
if ((0, internal_modules_10.isLowerThan)(this.prms.P.v, minP) || (0, internal_modules_10.isGreaterThan)(this.prms.P.v, maxP)) {
const m = new internal_modules_8.Message(internal_modules_8.MessageCode.ERROR_PAR_P_DEVIATES_MORE_THAN_10_5_PCT);
m.extraVar.stdP = standardP;
r.resultElement.addMessage(m);
hasError = true;
}
}
// Check admissible values for S, L, N, a, M
const status = this.parCalc.checkInput();
if (status.fatal) {
for (const m of status.messages) {
r.resultElement.addMessage(m);
}
hasError = true;
}
// Check that input data is in the range given by abacuses
switch (this.calculatedParam) {
case this.prms.ha:
// check qStar
const qStar = this.parCalc.CalcQStar();
if ((0, internal_modules_10.isLowerThan)(qStar, this.parCalc.minQstar) || (0, internal_modules_10.isGreaterThan)(qStar, this.parCalc.maxQstar)) {
const mqstar = new internal_modules_8.Message(internal_modules_8.MessageCode.ERROR_PAR_QSTAR_OUT_OF_RANGE);
mqstar.extraVar.val = this.prms.Q.V;
mqstar.extraVar.min = this.parCalc.CalcQFromQStar(this.parCalc.minQstar);
mqstar.extraVar.max = this.parCalc.CalcQFromQStar(this.parCalc.maxQstar);
r.resultElement.addMessage(mqstar);
hasError = true;
}
break;
case this.prms.Q:
const m = this.checkHaAbacus();
if (m !== undefined) {
r.resultElement.addMessage(m);
hasError = true;
}
}
// if any fatal error occurred
if (hasError) {
this.currentResultElement = r;
return this.result;
}
super.Calc(sVarCalc, rInit);
// add checkInput()'s non fatal warnings to current result
for (const m of status.messages) {
this.result.resultElement.addMessage(m);
}
if (!this.result.ok)
return this.result;
// extra results
this.parCalc.addExtraResults(this.result);
// pass type independent extra results
if (this.prms.Z1.v !== undefined) {
// cote du déversoir à l'amont
this.result.resultElement.values.ZD1 = this.parCalc.ZD1;
if (this.prms.Z2.v !== undefined) {
const P = this.result.resultElement.values.P; // calculated by addExtraResults()
const ZR1 = this.result.resultElement.values.ZR1; // calculated by addExtraResults()
// nombre de ralentisseurs
// tslint:disable-next-line:variable-name
const Nb = this.parCalc.CalcNb(); // depends on Z1 and Z2
this.result.resultElement.values.Nb = Nb;
// cote de déversement à l'aval de la passe
const ZD2 = this.parCalc.ZD1 - this.parCalc.CalcLs() * this.prms.S.v / Math.sqrt(1 + this.prms.S.v * this.prms.S.v);
this.result.resultElement.values.ZD2 = ZD2; // DEBUG
// cote de radier de l'aval de la passe
this.result.resultElement.values.ZR2 = ZD2 - (this.parCalc.ZD1 - ZR1);
// longueur de la passe en suivant la pente
const LPI = this.parCalc.CalcLs();
this.result.resultElement.values.LPI = LPI;
// longueur de la passe en projection horizontale
this.result.resultElement.values.LPH = this.parCalc.CalcLh();
}
}
return this.result;
}
checkHaAbacus() {
let m;
if ((0, internal_modules_10.isLowerThan)(this.parCalc.ha, this.parCalc.minHa) || (0, internal_modules_10.isGreaterThan)(this.parCalc.ha, this.parCalc.maxHa)) {
m = new internal_modules_8.Message(internal_modules_8.MessageCode.ERROR_PAR_HA_OUT_OF_RANGE);
m.extraVar.val = this.parCalc.ha;
m.extraVar.min = this.parCalc.minHa;
m.extraVar.max = this.parCalc.maxHa;
}
return m;
}
Equation(sVarCalc) {
let v;
switch (sVarCalc) {
case "Q":
v = this.parCalc.CalcQFromHa();
break;
case "ha":
v = this.parCalc.CalcHa();
break;
default:
throw new Error("Par.Equation() : invalid variable name " + sVarCalc);
}
return new internal_modules_3.Result(v, this);
}
getFirstAnalyticalParameter() {
// use ha in dicho, when calculating L, to prevent negative sqrt() in doCalcQYFromHa()
return this.prms.ha;
}
update(sender, data) {
if (data.action === "propertyChange") {
if (data.name === "parType") {
switch (data.value) {
case ParType.PLANE:
this.parCalc = new internal_modules_4.ParTypePlane(this.prms);
break;
case ParType.FATOU:
this.parCalc = new internal_modules_5.ParTypeFatou(this.prms);
break;
case ParType.SUPERACTIVE:
this.parCalc = new internal_modules_6.ParTypeSuperactive(this.prms);
break;
case ParType.CHEVRON:
this.parCalc = new internal_modules_7.ParTypeChevron(this.prms);
break;
default:
throw new Error("Par.update() : invalid Par Type name " + data.value);
}
this.updateParamsVisibility();
}
}
}
updateParamsVisibility() {
this.prms.L.visible = ([ParType.PLANE, ParType.FATOU].includes(this.parType));
this.prms.a.visible = ([ParType.SUPERACTIVE, ParType.CHEVRON].includes(this.parType));
this.prms.N.visible = ([ParType.SUPERACTIVE, ParType.CHEVRON].includes(this.parType));
this.prms.M.visible = (this.parType === ParType.CHEVRON);
}
setParametersCalculability() {
this.prms.Q.calculability = internal_modules_2.ParamCalculability.EQUATION;
this.prms.ha.calculability = internal_modules_2.ParamCalculability.EQUATION;
}
static resultsUnits() {
return Par._resultsUnits;
}
exposeResults() {
this._resultsFamilies = {
h: undefined,
qStar: undefined,
V: undefined,
Nb: undefined,
ZD1: undefined,
ZR1: undefined,
ZD2: undefined,
ZR2: undefined,
ZM: undefined,
LPI: undefined,
LPH: undefined,
L: undefined
};
}
}
exports.Par = Par;
/**
* { symbol => string } map that defines units for extra results
*/
Par._resultsUnits = {
h: "m",
qStar: "m³/s",
V: "m/s",
ZD1: "m",
ZR1: "m",
ZD2: "m",
ZR2: "m",
ZM: "m",
LPI: "m",
LPH: "m",
B: "m",
C: "m",
D: "m",
H: "m",
Hmin: "m",
Hmax: "m"
};
//# sourceMappingURL=par.js.map