diff --git a/spec/structure/structure_jalhyd219_debit_nul.spec.ts b/spec/structure/structure_jalhyd219_debit_nul.spec.ts new file mode 100644 index 0000000000000000000000000000000000000000..15d0a2f76b4e1204a82f60c34af3798d6b44c929 --- /dev/null +++ b/spec/structure/structure_jalhyd219_debit_nul.spec.ts @@ -0,0 +1,40 @@ +import { RectangularStructureParams, StructureWeirFree } from "../../src/internal_modules"; + +describe("jalhyd#219 cote amont d'un ouvrage dénoyé à débit nul :", () => { + function createStruct(z1: number, zr: number): StructureWeirFree { + const s: StructureWeirFree = new StructureWeirFree( + new RectangularStructureParams(0, // Q + zr, // ZDV + z1, // Z1 + 92, // Z2 + 1, // L + 0.6, // Cd + 0.8 // W + ), + false + ); + s.calculatedParam = s.prms.Z1; + return s; + } + + it("cote amont initiale < Zr", () => { + const z1: number = 90; + const zr: number = 100; + const s: StructureWeirFree = createStruct(z1, zr); + expect(s.CalcSerie().vCalc).toBeCloseTo(zr, 3); + }); + + it("cote amont initiale = Zr", () => { + const z1: number = 100; + const zr: number = 100; + const s: StructureWeirFree = createStruct(z1, zr); + expect(s.CalcSerie().vCalc).toBeCloseTo(zr, 3); + }); + + it("cote amont initiale > Zr", () => { + const z1: number = 110; + const zr: number = 100; + const s: StructureWeirFree = createStruct(z1, zr); + expect(s.CalcSerie().vCalc).toBeCloseTo(zr, 3); + }); +}); diff --git a/src/structure/structure.ts b/src/structure/structure.ts index 0363d5133eabb71e30e54a71ff16896f9cdb262c..09e64c33bf7a8e0008784f6f7c6064a6ab8285de 100644 --- a/src/structure/structure.ts +++ b/src/structure/structure.ts @@ -194,10 +194,13 @@ export abstract class Structure extends ChildNub { // Débit nul <=> tirant d'eau amont = tirant d'eau aval ou tout autre paramètre nul switch (sVarCalc) { case "Z1": - this.currentResultElement = new Result(this.prms.Z2.v, this, flagsNull); + // max(Z2,ZDV) dans le cas dénoyé et noyé + // on met Z1 à ZDV pour faciliter les calculs sur les prébarrages + this.currentResultElement = new Result(Math.max(this.prms.Z2.v, this.prms.ZDV.v), this, flagsNull); return this._result; case "Z2": - this.currentResultElement = new Result(this.prms.Z1.v, this, flagsNull); + // max(Z1,ZDV) dans le cas dénoyé et noyé + this.currentResultElement = new Result(Math.max(this.prms.Z1.v, this.prms.ZDV.v), this, flagsNull); return this._result; default: // Est-ce toujours vrai ? Nécessitera peut-être d'étendre la méthode