diff --git a/spec/structure/structure_triangular_trunc_weir_free.spec.ts b/spec/structure/structure_triangular_trunc_weir_free.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..f11fc424ed3735e5ff034f07b81aa31f64d07adf --- /dev/null +++ b/spec/structure/structure_triangular_trunc_weir_free.spec.ts @@ -0,0 +1,31 @@ +/** + * 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 rectangular_structure.ts + */ +// import { describe, expect, it, xdescribe } from "../mock_jasmine"; + +import { StructureFlowMode, StructureFlowRegime } from "../../src/structure/structure"; +import { StructureTriangularTruncWeirFree } from "../../src/structure/structure_triangular_trunc_weir_free"; +import { TriangularTruncStructureParams } from "../../src/structure/triangular_trunc_structure_params"; +import { itCalcQ } from "./functions"; + +const structPrm: TriangularTruncStructureParams = + new TriangularTruncStructureParams(0, 100.1, 100.1, 100, 0.9, 101, 1.36); +const structTest: StructureTriangularTruncWeirFree = new StructureTriangularTruncWeirFree(structPrm, false); + +describe("Class StructureTriangularTruncWeirFree: ", () => { + describe("Calcul Q a surface libre avec h1 croissant: ", () => { + const h1: number[] = + [100.1, 100.2, 100.3, 100.4, 100.5, 100.6, 100.7, 100.8, 100.9, 101, 101.1, 101.5, 101.8, 102]; + const Q: number[] = + [0., 0.004, 0.024, 0.067, 0.138, 0.240, 0.379, 0.558, 0.778, 1.045, 1.356, 2.914, 4.346, 5.407]; + const mode: StructureFlowMode = StructureFlowMode.WEIR; + const regime: StructureFlowRegime = StructureFlowRegime.FREE; + itCalcQ(structTest, h1[0], Infinity, Q[0], StructureFlowMode.NULL, StructureFlowRegime.NULL); + for (let i = 1; i < Q.length; i++) { + itCalcQ(structTest, h1[i], Infinity, Q[i], mode, regime); + } + }); +}); diff --git a/spec/structure/structure_triangular_weir_free.spec.ts b/spec/structure/structure_triangular_weir_free.spec.ts index b550f0758144266a936d5283df3dc1871ce702c5..c16821a86312cda7d44d01a700ff47036a5d6695 100644 --- a/spec/structure/structure_triangular_weir_free.spec.ts +++ b/spec/structure/structure_triangular_weir_free.spec.ts @@ -14,7 +14,7 @@ import { itCalcQ } from "./functions"; const structPrm: TriangularStructureParams = new TriangularStructureParams(0, 100.1, 100.1, 100, 45, 1.36); const structTest: StructureTriangularWeirFree = new StructureTriangularWeirFree(structPrm, false); -describe("Class StructureWeirFree: ", () => { +describe("Class StructureTriangularWeirFree: ", () => { describe("Calcul Q a surface libre avec h1 croissant: ", () => { const h1: number[] = [100.1, 100.2, 100.3, 100.4, 100.5, 100.6, 100.7, 100.8, 100.9, 101, 102]; const Q: number[] = [0., 0.004, 0.024, 0.067, 0.138, 0.240, 0.379, 0.558, 0.778, 1.045, 6.767]; diff --git a/src/structure/structure_triangular_trunc_weir_free.ts b/src/structure/structure_triangular_trunc_weir_free.ts new file mode 100644 index 0000000000000000000000000000000000000000..93cb309e0d73eb454ce868e4874a987079ea8507 --- /dev/null +++ b/src/structure/structure_triangular_trunc_weir_free.ts @@ -0,0 +1,49 @@ +import { Result } from "../util/result"; +import { Structure, StructureFlowMode, StructureFlowRegime } from "./structure"; +import { TriangularTruncStructureParams } from "./triangular_trunc_structure_params"; + +export { TriangularTruncStructureParams }; + +/** + * Equation classique seuil triangulaire dénoyé + */ +export class StructureTriangularTruncWeirFree extends Structure { + + constructor(prms: TriangularTruncStructureParams, dbg: boolean = false) { + super(prms, dbg); + } + + /** + * paramètres castés au bon type + */ + get prms(): TriangularTruncStructureParams { + return this._prms as TriangularTruncStructureParams; + } + + /** + * Calcul analytique Q = f(Cd, L, h1, h2, W) seuil dénoyé + * @param sVarCalc Variable à calculer (doit être "Q") + */ + public Equation(sVarCalc: string): Result { + Structure.CheckEquation(sVarCalc); + const data = this.getResultData(); + + let v: number = this.prms.Cd.v * this.prms.B2.v / (this.prms.ZT.v - this.prms.ZDV.v); + if (this.prms.Z1.v <= this.prms.ZT.v) { + v = v * Math.pow(this.prms.h1.v, 2.5); + } else { + v = v * (Math.pow(this.prms.h1.v, 2.5) - Math.pow(this.prms.Z1.v - this.prms.ZT.v, 2.5)); + } + + return new Result(v, data); + } + + protected getFlowRegime() { + return StructureFlowRegime.FREE; + } + + protected getFlowMode() { + return StructureFlowMode.WEIR; + } + +} diff --git a/src/structure/triangular_trunc_structure_params.ts b/src/structure/triangular_trunc_structure_params.ts new file mode 100644 index 0000000000000000000000000000000000000000..bed29fa150dd3b08851f664a8ad48b992f17a4f2 --- /dev/null +++ b/src/structure/triangular_trunc_structure_params.ts @@ -0,0 +1,42 @@ +import { ParamDefinition } from "../param/param-definition"; +import { ParamDomainValue } from "../param/param-domain"; +import { StructureParams } from "./structure_params"; + +/** + * Parameters for rectangular structures (common for all rectangular structure equations) + */ +export class TriangularTruncStructureParams extends StructureParams { + /** Demi-ouverture du triangle (m) */ + public B2: ParamDefinition; + + /** Cote haute du triangle (m) */ + public ZT: ParamDefinition; + + /** Discharge coefficient */ + // tslint:disable-next-line:variable-name + public Cd: ParamDefinition; + + /** + * Constructeur d'une structure rectangulaire + * @param rQ Débit (m3/s) + * @param rZDV Cote de la crête du déversoir ou du radier de la vanne (m) + * @param rZ1 Cote de l'eau amont (m) + * @param rZ2 Cote de l'eau aval (m) + * @param rB2 Demi-ouverture du triangle (m) + * @param rZT Cote haute du triangle (m) + * @param rCd Coefficient de débit (-) + * @param rW Ouverture de la vanne (m) (Valeur par défaut +infinity pour les déversoirs) + */ + constructor( + rQ: number, rZDV: number, rZ1: number, rZ2: number, + rB2: number, rZT: number, rCd: number, rW: number = Infinity + ) { + super(rQ, rZDV, rZ1, rZ2, rW); + this.B2 = new ParamDefinition("B2", ParamDomainValue.POS, rB2); + this.addParamDefinition(this.B2); + this.ZT = new ParamDefinition("ZT", ParamDomainValue.POS, rZT); + this.addParamDefinition(this.ZT); + this.Cd = new ParamDefinition("Cd", ParamDomainValue.POS, rCd); + this.addParamDefinition(this.Cd); + } +}