From 7b01c01ec549e6c62f2123053eb05b10d401008d Mon Sep 17 00:00:00 2001
From: David Dorchies <david.dorchies@irstea.fr>
Date: Mon, 12 Aug 2019 09:58:19 +0200
Subject: [PATCH] Invisible parameters can be calculated anyway (Q for Compound
 Macrorugo)

---
 spec/fuzzing.spec.ts                                   |  1 +
 src/nub.ts                                             |  1 -
 src/structure/structure.ts                             |  2 +-
 src/structure/structure_cem88d.ts                      | 10 ++++++++++
 src/structure/structure_cem88v.ts                      | 10 ++++++++++
 src/structure/structure_cunge80.ts                     | 10 ++++++++++
 src/structure/structure_rectangular_orifice_free.ts    |  9 +++++++++
 .../structure_rectangular_orifice_submerged.ts         |  9 +++++++++
 8 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/spec/fuzzing.spec.ts b/spec/fuzzing.spec.ts
index 060e09dc..c2643906 100644
--- a/spec/fuzzing.spec.ts
+++ b/spec/fuzzing.spec.ts
@@ -155,6 +155,7 @@ describe("Fuzz testing", () => {
         }
     });
     for (const iCalType of calTypes) {
+        // if ([CalculatorType.MacroRugoCompound].includes(iCalType)) {
         if (!nubsNotTested.includes(iCalType)) {
             describe(CalculatorType[iCalType], () => {
                 for (let i = 0; i < fuzzyCfg.nTests; i++) {
diff --git a/src/nub.ts b/src/nub.ts
index 4e32a729..a9c8ce5d 100644
--- a/src/nub.ts
+++ b/src/nub.ts
@@ -71,7 +71,6 @@ export abstract class Nub extends ComputeNode implements IObservable {
         for (const p of this.parameterIterator) {
             if (
                 p.symbol !== "Pr" &&
-                p.visible &&
                 [ParamCalculability.DICHO, ParamCalculability.EQUATION].includes(p.calculability)
             ) {
                 calcPrms.push(p);
diff --git a/src/structure/structure.ts b/src/structure/structure.ts
index 01980793..75285fdc 100644
--- a/src/structure/structure.ts
+++ b/src/structure/structure.ts
@@ -320,7 +320,7 @@ export abstract class Structure extends Nub {
         this.prms.Z2.calculability = ParamCalculability.DICHO;
         this.prms.h1.calculability = ParamCalculability.DICHO;
         this.prms.h2.calculability = ParamCalculability.DICHO;
-        this.prms.W.calculability = ParamCalculability.DICHO;
+        this.prms.W.calculability = ParamCalculability.FIXED;
     }
 
     /**
diff --git a/src/structure/structure_cem88d.ts b/src/structure/structure_cem88d.ts
index 08bfeb4c..51d820c5 100644
--- a/src/structure/structure_cem88d.ts
+++ b/src/structure/structure_cem88d.ts
@@ -1,3 +1,4 @@
+import { ParamCalculability } from "../param/param-definition";
 import { Result } from "../util/result";
 import { RectangularStructure } from "./rectangular_structure";
 import { RectangularStructureParams } from "./rectangular_structure_params";
@@ -65,6 +66,14 @@ export class StructureGateCem88d extends RectangularStructure {
 
         return new Result(v, this, data);
     }
+
+    /**
+     * paramétrage de la calculabilité des paramètres
+     */
+    protected setParametersCalculability() {
+        super.setParametersCalculability();
+        this.prms.W.calculability = ParamCalculability.DICHO;
+    }
 }
 
 // tslint:disable-next-line:max-classes-per-file
@@ -81,4 +90,5 @@ export class StructureWeirCem88d extends StructureGateCem88d {
     protected getFlowMode(): StructureFlowMode {
         return StructureFlowMode.WEIR;
     }
+
 }
diff --git a/src/structure/structure_cem88v.ts b/src/structure/structure_cem88v.ts
index 8a5d9c49..dec63d40 100644
--- a/src/structure/structure_cem88v.ts
+++ b/src/structure/structure_cem88v.ts
@@ -1,3 +1,4 @@
+import { ParamCalculability } from "../param/param-definition";
 import { Result } from "../util/result";
 import { RectangularStructure } from "./rectangular_structure";
 import { RectangularStructureParams } from "./rectangular_structure_params";
@@ -115,6 +116,14 @@ export class StructureGateCem88v extends RectangularStructure {
         }
     }
 
+    /**
+     * paramétrage de la calculabilité des paramètres
+     */
+    protected setParametersCalculability() {
+        super.setParametersCalculability();
+        this.prms.W.calculability = ParamCalculability.DICHO;
+    }
+
     private getAlfa(h2: number): number {
         let alfa: number = 1 - 0.14 * (h2) / this.W;
         alfa = Math.min(Math.max(alfa, 0.4), 0.75);
@@ -147,4 +156,5 @@ export class StructureWeirCem88v extends StructureGateCem88v {
     protected getFlowMode(): StructureFlowMode {
         return StructureFlowMode.WEIR;
     }
+
 }
diff --git a/src/structure/structure_cunge80.ts b/src/structure/structure_cunge80.ts
index 79c2fff0..a19f4354 100644
--- a/src/structure/structure_cunge80.ts
+++ b/src/structure/structure_cunge80.ts
@@ -1,3 +1,4 @@
+import { ParamCalculability } from "../param/param-definition";
 import { Result } from "../util/result";
 import { RectangularStructure } from "./rectangular_structure";
 import { RectangularStructureParams } from "./rectangular_structure_params";
@@ -80,6 +81,14 @@ export class StructureGateCunge80 extends RectangularStructure {
             }
         }
     }
+
+    /**
+     * paramétrage de la calculabilité des paramètres
+     */
+    protected setParametersCalculability() {
+        super.setParametersCalculability();
+        this.prms.W.calculability = ParamCalculability.DICHO;
+    }
 }
 
 // tslint:disable-next-line:max-classes-per-file
@@ -94,4 +103,5 @@ export class StructureWeirCunge80 extends StructureGateCunge80 {
     protected getFlowMode(): StructureFlowMode {
         return StructureFlowMode.WEIR;
     }
+
 }
diff --git a/src/structure/structure_rectangular_orifice_free.ts b/src/structure/structure_rectangular_orifice_free.ts
index 8f0592b6..18c2cc80 100644
--- a/src/structure/structure_rectangular_orifice_free.ts
+++ b/src/structure/structure_rectangular_orifice_free.ts
@@ -1,3 +1,4 @@
+import { ParamCalculability } from "../param/param-definition";
 import { Result } from "../util/result";
 import { RectangularStructure } from "./rectangular_structure";
 import { RectangularStructureParams } from "./rectangular_structure_params";
@@ -34,4 +35,12 @@ export class StructureRectangularOrificeFree extends RectangularStructure {
     protected getFlowRegime() {
         return StructureFlowRegime.FREE;
     }
+
+    /**
+     * paramétrage de la calculabilité des paramètres
+     */
+    protected setParametersCalculability() {
+        super.setParametersCalculability();
+        this.prms.W.calculability = ParamCalculability.DICHO;
+    }
 }
diff --git a/src/structure/structure_rectangular_orifice_submerged.ts b/src/structure/structure_rectangular_orifice_submerged.ts
index 2550a70e..257bbd49 100644
--- a/src/structure/structure_rectangular_orifice_submerged.ts
+++ b/src/structure/structure_rectangular_orifice_submerged.ts
@@ -1,3 +1,4 @@
+import { ParamCalculability } from "../param/param-definition";
 import { Result } from "../util/result";
 import { RectangularStructure } from "./rectangular_structure";
 import { RectangularStructureParams } from "./rectangular_structure_params";
@@ -37,4 +38,12 @@ export class StructureRectangularOrificeSubmerged extends RectangularStructure {
     protected getFlowRegime() {
         return StructureFlowRegime.SUBMERGED;
     }
+
+    /**
+     * paramétrage de la calculabilité des paramètres
+     */
+    protected setParametersCalculability() {
+        super.setParametersCalculability();
+        this.prms.W.calculability = ParamCalculability.DICHO;
+    }
 }
-- 
GitLab