An error occurred while loading the file. Please try again.
-
Le Roux Erwan authoreda2ded98d
import { ConduiteDistrib, ConduiteDistribParams } from "../../src/cond_distri";
import { ParallelStructure, ParamDefinition, ParamValueMode, SectionParametree, Session, Nub } from "../../src/index";
import { MacroRugo } from "../../src/macrorugo/macrorugo";
import { RegimeUniforme } from "../../src/regime_uniforme";
import { CourbeRemous, CourbeRemousParams, MethodeResolution } from "../../src/remous";
import { cSnCirc, ParamsSectionCirc } from "../../src/section/section_circulaire";
import { cSnTrapez, ParamsSectionTrapez } from "../../src/section/section_trapez";
import { Cloisons } from "../../src/structure/cloisons";
import { CloisonsParams } from "../../src/structure/cloisons_params";
import { Dever, DeverParams } from "../../src/structure/dever";
import { CreateStructure } from "../../src/structure/factory_structure";
import { RectangularStructure } from "../../src/structure/rectangular_structure";
import { LoiDebit } from "../../src/structure/structure_props";
import {
RectangularStructureParams,
StructureWeirSubmergedLarinier
} from "../../src/structure/structure_weir_submerged_larinier";
/**
* IMPORTANT !
* Décommenter temporairement la ligne suivante (import { } from "./mock_jasmine")
* Pour exécuter ce code dans le débugger.
* Faire de même avec le fichier test_func.ts
*/
// import { describe, expect, it, xdescribe, xit } from "../mock_jasmine";
function createEnv() {
// create complex session
const dever: Dever = new Dever(
new DeverParams(
0, // rQ Débit total (m3/s)
102, // rZ1 Cote de l'eau amont (m)
2, // rBR Largeur du cours d'eau amont (m)
100 // rZR Cote du lit du cours d'eau amont (m)
),
false // debug
);
dever.addChild(CreateStructure(LoiDebit.TriangularTruncWeirFree, dever, false));
const cloisons: Cloisons = new Cloisons(
new CloisonsParams(
0, // Débit total (m3/s)
102, // Cote de l'eau amont (m)
10, // Longueur des bassins (m)
1, // Largeur des bassins (m)
1, // Profondeur moyenne (m)
0.5 // Hauteur de chute (m)
),
false // debug
);
const fente: StructureWeirSubmergedLarinier = new StructureWeirSubmergedLarinier(
new RectangularStructureParams(
0,
101,
102,
101.5,
0.2,
0.65
)
);
cloisons.addChild(fente);
const prmsCD = new ConduiteDistribParams(undefined, // débit Q
1.2, // diamètre D
0.6, // perte de charge J
100, // Longueur de la conduite Lg
1e-6, // Viscosité dynamique Nu
);
const conduite = new ConduiteDistrib(prmsCD);
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
const prmsST = new ParamsSectionTrapez(2.5, // largeur de fond
0.56, // fruit
undefined, // tirant d'eau
40, // Ks=Strickler
2, // Q=Débit
0.001, // If=pente du fond
1, // YB= hauteur de berge
);
const sect = new cSnTrapez(prmsST);
const prem = new CourbeRemousParams(0.15, // Yamont = tirant amont
0.803, // Yaval = tirant aval
5, // Long= Longueur du bief
5, // Dx=Pas d'espace
);
const rem = new CourbeRemous(sect, prem, MethodeResolution.Trapezes);
const paramSection = new ParamsSectionCirc(2, // diamètre
0.8, // tirant d'eau
40, // Ks=Strickler
10, // Q=Débit
0.001, // If=pente du fond
1, // YB= hauteur de berge
);
const section = new cSnCirc(paramSection);
const sp = new SectionParametree(section);
Session.getInstance().clear();
Session.getInstance().registerNub(dever);
Session.getInstance().registerNub(cloisons);
Session.getInstance().registerNub(conduite);
Session.getInstance().registerNub(rem);
Session.getInstance().registerNub(sp);
}
function checkLink(param: ParamDefinition, nub: Nub, symbol: string) {
expect(param.valueMode).toBe(ParamValueMode.LINK);
expect(param.referencedValue).toBeDefined();
if (param.referencedValue) {
expect(param.referencedValue.nub.uid).toBe(nub.uid);
expect(param.referencedValue.symbol).toBe(symbol);
}
}
describe("serialising / deserialising session - ", () => {
it ("serialized file should contain 5 Nubs", () => {
createEnv();
const session = Session.getInstance().serialise();
const js = JSON.parse(session);
expect(Object.keys(js)).toContain("session");
expect(js.session.length).toBe(5);
});
it ("reloading serialized file should give 5 Nubs", () => {
createEnv();
const session = Session.getInstance().serialise();
Session.getInstance().clear();
expect(Session.getInstance().getNumberOfNubs()).toBe(0);
Session.getInstance().unserialise(session);
expect(Session.getInstance().getNumberOfNubs()).toBe(5);
});
it("when saving a SectionParametree, the edited values should be present in the file", () => {
// d
const paramSection = new ParamsSectionCirc(
2, // diamètre
0.8, // tirant d'eau
40, // Ks=Strickler
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
10, // Q=Débit
0.001, // If=pente du fond
1, // YB= hauteur de berge
);
const section = new cSnCirc(paramSection);
const sp = new SectionParametree(section);
sp.section.prms.Ks.singleValue = 42;
const serialised = sp.serialise();
expect(serialised).toContain('{"symbol":"Ks","mode":"SINGLE","value":42}');
});
it ("loaded serialized RegimeUniforme should be calculable", () => {
Session.getInstance().clear();
// tslint:disable-next-line:max-line-length
const session = `{"session":[{"uid":"YTEwZG","props":{"calcType":3,"nodeType":2},"meta":{"title":"R. uniforme"},"children":[{"uid":"NDcxN3","props":{"calcType":14,"nodeType":2},"children":[],"parameters":[{"symbol":"Pr","mode":"SINGLE","value":0.0001},{"symbol":"Ks","mode":"SINGLE","value":40},{"symbol":"Q","mode":"CALCUL"},{"symbol":"If","mode":"SINGLE","value":0.001},{"symbol":"YB","mode":"SINGLE","value":1},{"symbol":"Y","mode":"SINGLE","value":0.89},{"symbol":"LargeurBerge","mode":"SINGLE","value":2.5}]}],"parameters":[{"symbol":"Pr","mode":"SINGLE","value":0.0001}]}]}`;
Session.getInstance().unserialise(session);
expect(Session.getInstance().getNumberOfNubs()).toBe(1);
const RU = Session.getInstance().findNubByUid("YTEwZG");
expect(RU).toBeDefined();
const calculatedParam = RU.calculatedParam;
expect(calculatedParam.symbol).toBe("Q");
let nbCalc = 0;
for (const p of RU.parameterIterator) {
if (p.valueMode === ParamValueMode.CALCUL) {
nbCalc++;
}
}
expect(nbCalc).toBe(1);
RU.CalcSerie();
expect(RU.result).toBeDefined();
});
it ("loaded serialized Ouvrages should be calculable", () => {
Session.getInstance().clear();
// tslint:disable-next-line:max-line-length
const session = `{"session":[{"uid":"NGVzdz","props":{"calcType":8,"nodeType":0},"meta":{"title":"Ouvrages"},"children":[{"uid":"Z2F4dz","props":{"calcType":7,"nodeType":5,"structureType":1,"loiDebit":1},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"W","mode":"SINGLE","value":0.5},{"symbol":"L","mode":"SINGLE","value":2},{"symbol":"Cd","mode":"SINGLE","value":0.6}]},{"uid":"ZDR4cX","props":{"calcType":7,"nodeType":5,"structureType":1,"loiDebit":1},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"W","mode":"SINGLE","value":0.5},{"symbol":"L","mode":"CALCUL"},{"symbol":"Cd","mode":"SINGLE","value":0.6}]}],"parameters":[{"symbol":"Pr","mode":"SINGLE","value":0.0001},{"symbol":"Q","mode":"SINGLE","value":3.5},{"symbol":"Z1","mode":"SINGLE","value":102},{"symbol":"Z2","mode":"SINGLE","value":101.5}]}]}`;
Session.getInstance().unserialise(session);
expect(Session.getInstance().getNumberOfNubs()).toBe(1);
const OUV = Session.getInstance().findNubByUid("NGVzdz");
expect(OUV).toBeDefined();
const calculatedParam = OUV.calculatedParam;
expect(calculatedParam.symbol).toBe("L");
let nbCalc = 0;
for (const p of OUV.parameterIterator) {
if (p.valueMode === ParamValueMode.CALCUL) {
nbCalc++;
}
}
expect(nbCalc).toBe(1);
OUV.CalcSerie();
expect(OUV.result).toBeDefined();
expect(OUV.result.vCalc).toBeCloseTo(1.031);
});
it ("loaded serialized spaghetti session should have the right target for every link", () => {
Session.getInstance().clear();
// tslint:disable-next-line:max-line-length
const session = `{"header":{"source":"jalhyd","format_version":"1.0","created":"2019-04-26T10:25:29.891Z"},"session":[{"uid":"ZHh1YW","props":{"calcType":2,"nodeType":2},"meta":{"title":"Sec. param."},"children":[{"uid":"bXB1Y3","props":{"calcType":14,"nodeType":2},"children":[],"parameters":[{"symbol":"Pr","mode":"SINGLE","value":0.0001},{"symbol":"Ks","mode":"SINGLE","value":40},{"symbol":"Q","mode":"SINGLE","value":1.2},{"symbol":"If","mode":"SINGLE","value":0.001},{"symbol":"YB","mode":"SINGLE","value":1},{"symbol":"Y","mode":"SINGLE","value":0.8},{"symbol":"LargeurBerge","mode":"LINK","targetNub":"YTBjcm","targetParam":"L"}]}],"parameters":[{"symbol":"Pr","mode":"SINGLE","value":0.0001}]},{"uid":"eTgwMG","props":{"calcType":11,"nodeType":0},"meta":{"title":"Macro-rugo."},"children":[],"parameters":[{"symbol":"Pr","mode":"SINGLE","value":0.0001},{"symbol":"ZF1","mode":"LINK","targetNub":"dGx0em","targetParam":"Z1"},{"symbol":"L","mode":"SINGLE","value":6},{"symbol":"B","mode":"CALCUL"},{"symbol":"If","mode":"SINGLE","value":0.05},{"symbol":"Q","mode":"LINK","targetNub":"bXB1Y3","targetParam":"Q"},{"symbol":"Y","mode":"SINGLE","value":0.6},{"symbol":"Ks","mode":"SINGLE","value":0.01},{"symbol":"C","mode":"SINGLE","value":0.05},{"symbol":"PBD","mode":"SINGLE","value":0.5},{"symbol":"PBH","mode":"MINMAX","min":0.4,"max":1.6,"step":0.06000000000000001},{"symbol":"Cd0","mode":"SINGLE","value":1.5}]},{"uid":"dGx0em","props":{"calcType":8,"nodeType":0},"meta":{"title":"Ouvrages"},"children":[{"uid":"ZmZ3bX","props":{"calcType":7,"nodeType":5,"structureType":1,"loiDebit":1},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"W","mode":"SINGLE","value":0.5},{"symbol":"L","mode":"CALCUL"},{"symbol":"Cd","mode":"SINGLE","value":0.6}]},{"uid":"aWo0M2","props":{"calcType":7,"nodeType":5,"structureType":1,"loiDebit":1},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"W","mode":"SINGLE","value":0.5},{"symbol":"L","mode":"LINK","targetNub":"YTBjcm","targetParam":"L"},{"symbol":"Cd","mode":"SINGLE","value":0.6}]},{"uid":"YTBjcm","props":{"calcType":7,"nodeType":5,"structureType":1,"loiDebit":1},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"W","mode":"LINK","targetNub":"aWo0M2","targetParam":"W"},{"symbol":"L","mode":"SINGLE","value":2},{"symbol":"Cd","mode":"LINK","targetNub":"ZmZ3bX","targetParam":"Cd"}]}],"parameters":[{"symbol":"Pr","mode":"SINGLE","value":0.0001},{"symbol":"Q","mode":"SINGLE","value":0.5},{"symbol":"Z1","mode":"SINGLE","value":102},{"symbol":"Z2","mode":"LINK","targetNub":"cXFraW","targetParam":"Z1"}]},{"uid":"dzA1OX","props":{"calcType":3,"nodeType":2},"meta":{"title":"R. uniforme"},"children":[{"uid":"Ynlna2","props":{"calcType":14,"nodeType":2},"children":[],"parameters":[{"symbol":"Pr","mode":"SINGLE","value":0.0001},{"symbol":"Ks","mode":"SINGLE","value":40},{"symbol":"Q","mode":"LINK","targetNub":"cXFraW","targetParam":"CvQT"},{"symbol":"If","mode":"MINMAX","min":0.0005,"max":0.002,"step":0.00007500000000000001},{"symbol":"YB","mode":"SINGLE","value":1},{"symbol":"Y","mode":"SINGLE","value":0.8},{"symbol":"LargeurBerge","mode":"CALCUL"}]}],"parameters":[{"symbol":"Pr","mode":"SINGLE","value":0.0001}]},{"uid":"cXFraW","props":{"calcType":9,"nodeType":0},"meta":{"title":"Déver. dénoyés"},"children":[{"uid":"Zzd1cH","props":{"calcType":7,"nodeType":5,"structureType":0,"loiDebit":7},"children":[],"parameters":[{"symbol":"ZDV","mode":"SINGLE","value":100},{"symbol":"L","mode":"SINGLE","value":2},{"symbol":"Cd","mode":"SINGLE","value":0.4}]}],"parameters":[{"symbol":"Pr","mode":"SINGLE","value":0.0001},{"symbol":"Q","mode":"CALCUL"},{"symbol":"Z1","mode":"SINGLE","value":102},{"symbol":"BR","mode":"LINK","targetNub":"ZHh1YW","targetParam":"B"},{"symbol":"ZR","mode":"SINGLE","value":99}]}]}`;
Session.getInstance().unserialise(session);
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
expect(Session.getInstance().getNumberOfNubs()).toBe(5);
const SP = (Session.getInstance().findNubByUid("ZHh1YW") as SectionParametree);
const OU = (Session.getInstance().findNubByUid("dGx0em") as ParallelStructure);
const MR = (Session.getInstance().findNubByUid("eTgwMG") as MacroRugo);
const RU = (Session.getInstance().findNubByUid("dzA1OX") as RegimeUniforme);
const DD = (Session.getInstance().findNubByUid("cXFraW") as Dever);
// 1. check Section Paramétrée
expect(SP).toBeDefined();
checkLink(SP.section.prms.LargeurBerge, OU.structures[2], "L");
// 2. check Macro-rugo
expect(MR).toBeDefined();
checkLink(MR.prms.ZF1, OU, "Z1");
checkLink(MR.prms.Q, SP.section, "Q");
// 3. check Ouvrages
expect(OU).toBeDefined();
checkLink(OU.prms.Z2, DD, "Z1");
const struct2 = (OU.structures[1] as RectangularStructure);
checkLink(struct2.prms.L, OU.structures[2], "L");
const struct3 = (OU.structures[2] as RectangularStructure);
checkLink(struct3.prms.W, OU.structures[1], "W");
checkLink(struct3.prms.Cd, OU.structures[0], "Cd");
// 4. check Régime Uniforme
expect(RU).toBeDefined();
checkLink(RU.section.prms.Q, DD, "CvQT");
// 5. check Déversoirs dénoyés
expect(DD).toBeDefined();
checkLink(DD.prms.BR, SP, "B");
});
});