diff --git a/docs-fr/calculators/pam/macrorugo.md b/docs-fr/calculators/pam/macrorugo.md new file mode 100644 index 0000000000000000000000000000000000000000..6b4014b03e016a98e79878f67356ba4a731d7d77 --- /dev/null +++ b/docs-fr/calculators/pam/macrorugo.md @@ -0,0 +1,31 @@ +# Passe à macro-rugosité + +Le module de calcul passe à macro rugosité permet de calculer les caractéristiques d'une passe à macro-rugosité constituée de blocs uniformément répartis avec des espacements transversaux \(ay\) et longitudinaux \(ay\) égaux. + + + +*Extrait de Larinier et al., 2006[^1]* + +[^1]: Larinier, Michel, Courret, D., Gomes, P., 2006. Guide technique pour la conception des passes à poissons “naturelles,†Rapport GHAPPE RA. Compagnie Nationale du Rhône / Agence de l’Eau Adour Garonne. http://dx.doi.org/10.13140/RG.2.1.1834.8562 + + +L'outil permet de calculer l'une des valeurs suivantes : + +- La largeur de la passe (m) ; +- La pente de la passe (m) ; +- Le débit (m<sup>3</sup>/s) ; +- La profondeur \(h\) (m) ; +- La concentration des blocs \(C\). + +Il nécessite d'entrer les valeurs suivantes : + +- La cote de fond amont (m) ; +- La longueur de la passe (m) ; +- La rugosité de fond (m) ; +- La largeur des blocs \(D\) face à l’écoulement (m) ; +- La hauteur utile des blocs \(k\) (m) ; +- Le paramètre de forme des blocs (1 pour rond, 2 pour carré) + +L'espacement entre les blocs se calcule ensuite avec la formule suivante : + +$$ax = ay = \frac{D}{\sqrt{C}}$$ diff --git a/docs-fr/calculators/pam/macrorugo_theorie.md b/docs-fr/calculators/pam/macrorugo_theorie.md new file mode 100644 index 0000000000000000000000000000000000000000..328d5816ff5dffe166b796ce53f51a363e9457e0 --- /dev/null +++ b/docs-fr/calculators/pam/macrorugo_theorie.md @@ -0,0 +1,162 @@ +# Calcul du débit d'une passe à macro-rugosité + +Le calcul du débit d'une passe à macro-rugosité correspond à l'implémentation de l'algorithme et des équations présentent dans +*Cassan L, Laurens P. 2016. Design of emergent and submerged rock-ramp fish passes. Knowl. Manag. Aquat. Ecosyst., 417, 45*. + +## Principe général du calcul + + +La limite entre le cas émergent et le cas submergé se situe à \(h = 1.1 \times k\). + +## Cas submergé + +Le calcul du débit se fait par itérations successives qui consistent à trouver la valeur de débit permettant d'obtenir l'égalite entre la vitesse moyenne du lit donnée par : + +$$u_0 = \sqrt{2 g S D (1 - \sigma C)/(C_d C)}$$ + +et la vitesse moyenne du lit donnée par intégration des débits entre et au-dessus des blocs : + +$$\bar{u} = \frac{Q_{inf} + Q_{sup}}{k}$$ + +avec respectivement \(Q_{inf}\) et \(Q_{sup}\) les débits unitaires pour la partie dans la canopée et la partie au dessus de la canopée. + +### Calcul du débit unitaire *Q<sub>inf</sub>* dans la canopée + +Le débit dans la canopée est obtenu par intégration du profil de vitesse (Eq. 9, Cassan et al., 2016) : + +$$Q_{inf} = \int_{0}^1 u(\tilde{z}) d \tilde{z}$$ + +avec + +$$u(\tilde{z}) = u_0 \sqrt{\beta \left( \frac{h}{k} -1 \right) \frac{\sinh(\beta \tilde{z})}{\cosh(\beta)} + 1}$$ + +avec + +$$\beta = \sqrt{(k / \alpha_t)(C_d C k / D)/(1 - \sigma C)}$$ + +avec \(\sigma = 1\) pour \(C_{d0} = 2\), \(\sigma = \pi/4\) sinon + +et \(\alpha_t\) obtenu à partir de la résolution de l'équation suivante : + +$$\alpha_t u(1) - l_0 u_* = 0$$ + +avec + +$$l_0 = \min \left( s, 0.15 k \right)$$ + +avec + +$$s = D \left( \frac{1}{\sqrt{C}} - 1 \right)$$ + +### Calcul du débit unitaire *Q<sub>sup</sub>* au dessus de la canopée + +$$Q_{sup} = \int_k^h u(z) dz$$ + +avec (Eq. 12, Cassan et al., 2016) + +$$u(z) = \frac{u_*}{\kappa} \ln \left( \frac{z - d}{z_0} \right) - 1 $$ + +avec (Eq. 14, Cassan et al., 2016) + +$$z_0 = (k - d) \exp \left( {\frac{-\kappa u_k}{u_*}} \right)$$ + +et (Eq. 13, Cassan et al., 2016) + +$$ d = k - \frac{\alpha_t u_k}{\kappa u_*}$$ + +ce qui donne + +$$Q_{sup} = \frac{u_*}{\kappa} \left( (h - d) \left( \ln \left( \frac{h-d}{z_0} \right) - 1\right) - \left( (k - d) \left( \ln \left( \frac{k-d}{z_0} \right) - 1 \right) \right) \right)$$ + +## Cas émergent + +Le calcul du débit se fait par itérations successives qui consistent à trouver la valeur de débit permettant d'obtenir l'égalité entre la vitesse apparente \(V\) et la vitesse moyenne du lit donnée par : + +$$u_0 = \sqrt{\frac{2 g S D (1 - \sigma C)}{C_d C (1 + N)}}$$ + +avec + +$$C_d = C_{d0} (1 + 0.4 / h_*^2) f_F(F)$$ + +$$N = \frac{\alpha C_f}{C_d C h_*}$$ + +avec + +$$\alpha = 1 - (a_y / a_x \times C)$$ + +## Formules utilisées + +### Vitesse débitante *V* + +$$V = \frac{Q}{B \times h}$$ + +### Vitesse entre les blocs *V<sub>g</sub>* + +$$V_g = \frac{V}{1 - \sqrt{(a_x/a_y)C}}$$ + +### Froude *F* + +$$F = \frac{V_g}{\sqrt{gh}}$$ + +### Fonction de correction du coefficient de trainée liée au Froude *f<sub>F</sub>(F)* + +Si \(F < 1.3\) (Eq. 5, Cassan et al., 2016) + +$$f_F(F) = \mathrm{min} \left( \frac{0.4 C_{d0} + 0.7}{1- (F^2 / 4)}, \frac{1}{F^{\frac{2}{3}}} \right)$$ + +sinon + +$$f_F(F) = F^{\frac{-4}{3}}$$ + +### Coefficient de friction du lit *C<inf>f</inf>* + +Si \(k_s < 10^{-6} \mathrm{m}\) alors + +$$C_f = 0.3164 / 4 * Re^{-0.25}$$ + +avec + +$$Re = u_0 \times h / \nu$$ + +Sinon (Eq. 3, Cassan et al., 2016) + +$$C_f = \frac{2}{(5.1 \mathrm{log} (h/k_s)+6)^2}$$ + +### Vitesse de cisaillement *u<sub>*</sub>* + +$$u_* = \sqrt{gS(h-k)}$$ + +## Notations + +- \(\alpha\) : ratio de l'aire concernée par la friction du lits sur \(a_x \times a_y\) +- \(\alpha_t\) : échelle de longueur de la turbulence dans la couche des blocs(m) +- \(\beta\) : ratio entre la contrainte due à la trainée et la contrainte due aux turbulences +- \(\kappa\) : constante de Von Karman = 0.41 +- \(\sigma\) : ratio entre l'aire du block dans le plan X,y et \(D^2\) +- \(a_x\) : largeur d'une cellule (perpendiculaire à l'écoulement) (m) +- \(a_y\) : longueur d'une cellule (parallèle à l'écoulement) (m) +- \(B\) : largeur de la passe (m) +- \(C\) : concentration de blocs +- \(C_d\) : coefficient de trainée d'un bloc dans les conditions d'écoulement actuel +- \(C_{d0}\) : coefficient de trainée d'un bloc considérant un bloc infiniment haut avec \(F \ll 1\) +- \(C_f)\) : coefficient de friction du lit +- \(d\) : déplacement dans le plan zéro du profil logarithmique (m) +- \(D\) : largeur du bloc face à l'écoulement (m) +- \(F\) : nombre de Froude basé sur \(h\) et \(V_g\) +- \(g\) : accélération de la gravité = 9.81 m.s<sup>-2</sup> +- \(h\) : profondeur moyenne (m) +- \(h_*\) : profondeur adimensionnelle (\(h / D\)) +- \(k\) : hauteur utile des blocs (m) +- \(k_s\) : hauteur de la rugosité (m) +- \(l_0\) : échelle de longueur de la turbulence au sommet des blocs (m) +- \(N\) : ratio entre la friction du lit et la force de trainée +- \(Q\) : débit (m<sup>3</sup>/s) +- \(S\) : pente de la passe (m/m) +- \(u_0\) : vitesse moyenne dans le lit (m/s) +- \(u_*\) : vitesse de cisaillement (m/s) +- \(V\) : vitesse débitante (m/s) +- \(V_g\) : vitesse entre les blocs (m/s) +- \(s\) : distance minimale entre les blocs (m) +- \(z\) : position verticale (m) +- \(z_0\) : rugosité hydraulique (m) +- \(\tilde{z}\) : position verticale adimensionnelle \(\tilde{z} = z / k\) diff --git a/docs-fr/calculators/pam/pam_schema_enrochement_regulier.png b/docs-fr/calculators/pam/pam_schema_enrochement_regulier.png new file mode 100755 index 0000000000000000000000000000000000000000..b8485ac803aaaae8e52355641e3e8cc4fc98c6df Binary files /dev/null and b/docs-fr/calculators/pam/pam_schema_enrochement_regulier.png differ diff --git a/mkdocs.yml b/mkdocs.yml index 49160968803b799412254dd3ecc515ca38cf01b9..e19425da2ef8e5a6d94ec1d25d07a809ed3d1694 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -8,6 +8,7 @@ extra_javascript: - ../mathjax/MathJax.js?config=TeX-AMS_CHTML markdown_extensions: - mdx_math + - footnotes nav: - avant-propos.md - Présentation de Cassiopée: @@ -28,5 +29,7 @@ nav: - Volume: calculators/pab/volume.md - Dimensions: calculators/pab/dimensions.md - Cloisons: calculators/pab/cloisons.md - + - Passes à macro-rugosité: + - calculators/pam/macrorugo.md + - calculators/pam/macrorugo_theorie.md diff --git a/src/app/calculators/cond_distri/cond_distri.fr.json b/src/app/calculators/cond_distri/cond_distri.fr.json index c092d188e93466ecbe7924ca4fd2fe7c71365330..5d775d9dede334303c269471aadaf3cc2fd0035a 100644 --- a/src/app/calculators/cond_distri/cond_distri.fr.json +++ b/src/app/calculators/cond_distri/cond_distri.fr.json @@ -1,6 +1,5 @@ { "fs_hydraulique": "Caractéristiques hydrauliques", - "Q": "Débit", "D": "Diamètre du tuyau", "J": "Perte de charge", "Lg": "Longueur du tuyau", diff --git a/src/app/calculators/lechapt-calmon/lechapt-calmon.fr.json b/src/app/calculators/lechapt-calmon/lechapt-calmon.fr.json index f3b6465da14b5fe31e8f0752672a27f472f9e096..2db51b945f5cacf25da4614be96179bc7f4bfe13 100644 --- a/src/app/calculators/lechapt-calmon/lechapt-calmon.fr.json +++ b/src/app/calculators/lechapt-calmon/lechapt-calmon.fr.json @@ -14,7 +14,6 @@ "M": "M", "N": "N", "fs_hydraulique": "Caractéristiques hydrauliques", - "Q": "Débit", "D": "Diamètre du tuyau", "J": "Perte de charge", "Lg": "Longueur du tuyau", diff --git a/src/app/calculators/macrorugo/macrorugo.config.json b/src/app/calculators/macrorugo/macrorugo.config.json new file mode 100644 index 0000000000000000000000000000000000000000..1b693b635b223382faf411ac305ef33c8c18a690 --- /dev/null +++ b/src/app/calculators/macrorugo/macrorugo.config.json @@ -0,0 +1,94 @@ +[ + { + "id": "fs_hydraulique_fix", + "type": "fieldset", + "option": "var", + "fields": [ + { + "type": "input", + "id": "ZF1", + "unit": "m" + }, + { + "type": "input", + "id": "L", + "unit": "m" + }, + { + "type": "input", + "id": "Ks", + "unit": "m" + } + ] + }, + { + "id": "fs_hydraulique_cal", + "type": "fieldset", + "option": "cal", + "fields": [ + { + "type": "input", + "id": "B", + "unit": "m" + }, + { + "type": "input", + "id": "If", + "unit": "m/m" + }, + { + "type": "input", + "id": "Q", + "unit": "m³/s" + }, + { + "type": "input", + "id": "Y", + "unit": "m" + }, + { + "type": "input", + "id": "C", + "unit": "" + } + ] + }, + { + "id": "fs_bloc", + "type": "fieldset", + "option": "var", + "fields": [ + { + "type": "input", + "id": "PBD", + "unit": "m" + }, + { + "type": "input", + "id": "PBH", + "unit": "m" + }, + { + "type": "input", + "id": "Cd0", + "unit": "" + } + ] + }, + { + "id": "fs_param_calc", + "type": "fieldset", + "option": "fix", + "fields": [ + { + "type": "input", + "id": "Pr" + } + ] + }, + { + "type": "options", + "idCal": "Q", + "help": "pam/macrorugo" + } +] \ No newline at end of file diff --git a/src/app/calculators/macrorugo/macrorugo.fr.json b/src/app/calculators/macrorugo/macrorugo.fr.json new file mode 100644 index 0000000000000000000000000000000000000000..0fb76a0b9ff14c1299c2f222a3f2d03a2d27921e --- /dev/null +++ b/src/app/calculators/macrorugo/macrorugo.fr.json @@ -0,0 +1,15 @@ +{ + "fs_hydraulique_fix": "Données hydrauliques fixées", + "fs_hydraulique_cal": "Données hydrauliques calculables", + "fs_bloc": "Paramètres des blocs", + "ZF1": "Cote de fond amont", + "L": "Longueur", + "B": "Largeur", + "If": "Pente", + "Y": "Profondeur", + "Ks": "Rugosité de fond", + "C": "Concentration de blocs", + "PBD": "Paramètre de bloc : Diamètre", + "PBH": "Paramètre de bloc : Hauteur", + "Cd0": "Paramètre de bloc : Forme (1 pour rond, 2 pour carré)" +} \ No newline at end of file diff --git a/src/app/calculators/ouvrages/ouvrages.fr.json b/src/app/calculators/ouvrages/ouvrages.fr.json index 6bb2421291ee456e3d6d56bbc8889a831c282133..16ac2c4c787d12539dea7db7ca98d213b6014776 100644 --- a/src/app/calculators/ouvrages/ouvrages.fr.json +++ b/src/app/calculators/ouvrages/ouvrages.fr.json @@ -24,7 +24,6 @@ "fruit": "Fruit", "fs_surverse": "Surverse", "fs_hydraulique": "Caractéristiques globales", - "Q": "Débit", "Y_A": "Cote de l'eau à l'amont", "Y_a": "Cote de l'eau à l'aval" } \ No newline at end of file diff --git a/src/app/calculators/pab-puissance/pab-puissance.fr.json b/src/app/calculators/pab-puissance/pab-puissance.fr.json index c3b45436cde69d54d545613658bb898603f97cfe..d1f891a181718cc68a16820a27332f8ec46a42e0 100644 --- a/src/app/calculators/pab-puissance/pab-puissance.fr.json +++ b/src/app/calculators/pab-puissance/pab-puissance.fr.json @@ -1,7 +1,6 @@ { "fs_puissance": "Paramètres", "DH": "Chute entre bassins", - "Q": "Débit", "V": "Volume", "PV": "Puissance dissipée" } \ No newline at end of file diff --git a/src/app/calculators/parallel-structures/parallel-structures.config.json b/src/app/calculators/parallel-structures/parallel-structures.config.json index cefbd84a989157a5452eba8987c25e8ccbd1fe6a..8ba966d2715785286851985709a4f8a68c2ccd1e 100644 --- a/src/app/calculators/parallel-structures/parallel-structures.config.json +++ b/src/app/calculators/parallel-structures/parallel-structures.config.json @@ -285,7 +285,7 @@ { "type": "input", "id": "ZRAM", - "unit": "", + "unit": "m", "nodeType": "StructureRectangle", "dep_exist": [ { diff --git a/src/app/calculators/regime-uniforme/regime-uniforme.fr.json b/src/app/calculators/regime-uniforme/regime-uniforme.fr.json index 2b36f059c4f954ef5cdcbaf066b6914ecd721287..9b3bf77dbe38fa44707a4abb51ae9a624df5b57e 100644 --- a/src/app/calculators/regime-uniforme/regime-uniforme.fr.json +++ b/src/app/calculators/regime-uniforme/regime-uniforme.fr.json @@ -19,6 +19,5 @@ "If": "Pente du fond", "YB": "Hauteur de berge", "fs_hydraulique": "Caractéristiques hydrauliques", - "Q": "Débit", "Y": "Tirant d'eau" } \ No newline at end of file diff --git a/src/app/calculators/section-param/section-param.fr.json b/src/app/calculators/section-param/section-param.fr.json index 3f29b000bd75aef48e7090a91d33bd6f54cf65c1..3620678ebb05f5925ca984d4b85538be3e0b1d8f 100644 --- a/src/app/calculators/section-param/section-param.fr.json +++ b/src/app/calculators/section-param/section-param.fr.json @@ -19,7 +19,6 @@ "If": "Pente du fond", "YB": "Hauteur de berge", "fs_hydraulique": "Caractéristiques hydrauliques", - "Q": "Débit", "Y": "Tirant d'eau", "fs_param_calc": "Paramètres de calcul", "Pr": "Précision de calcul", diff --git a/src/app/components/result-element/result-element-base.component.ts b/src/app/components/result-element/result-element-base.component.ts index ac70e025720e4f16f956c0301103025967d9813e..d30921bbea27adaa69cd3fec8d07b63b524a1f52 100644 --- a/src/app/components/result-element/result-element-base.component.ts +++ b/src/app/components/result-element/result-element-base.component.ts @@ -89,7 +89,6 @@ export class ResultElementBaseComponent implements OnChanges { res += this.intlService.localizeMessage(m); } } - this._htmlTooltip = res; this._emptyTooltip = this._htmlTooltip.length === 0; } diff --git a/src/app/formulaire/definition/concrete/form-cond-distri.ts b/src/app/formulaire/definition/concrete/form-base.ts similarity index 92% rename from src/app/formulaire/definition/concrete/form-cond-distri.ts rename to src/app/formulaire/definition/concrete/form-base.ts index 5f648a73a4482fee9d05dd42252d3497d16177d7..ca294f0b280cb68588c637e8e2dbe3b1c5e004f3 100644 --- a/src/app/formulaire/definition/concrete/form-cond-distri.ts +++ b/src/app/formulaire/definition/concrete/form-base.ts @@ -5,9 +5,9 @@ import { CalculatorResults } from "../../../results/calculator-results"; import { FormDefParamToCalculate } from "../form-def-paramcalc"; import { FormComputeFixedVar } from "../form-compute-fixedvar"; -export class FormulaireConduiteDistributrice extends FormulaireDefinition { +export class FormulaireBase extends FormulaireDefinition { - // private _formFixedVar: FormDefFixedVar; + private _formFixedVar: FormDefFixedVar; private _formParamCalc: FormDefParamToCalculate; diff --git a/src/app/formulaire/definition/concrete/form-dever.ts b/src/app/formulaire/definition/concrete/form-dever.ts deleted file mode 100644 index 01543d811a6e4bcfe339a30468428352587a45f4..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/concrete/form-dever.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { FormDefParallelStructures } from "../form-def-parallel-structures"; -import { FormDefParamToCalculate } from "../form-def-paramcalc"; -import { FormComputeParallelStructures } from "../form-compute-parallel-structures"; -import { FormResultFixedVar } from "../form-result-fixedvar"; -import { CalculatorType, ComputeNodeType, StructureType, LoiDebit } from "jalhyd"; -import { FormulaireParallelStructure } from "./form-parallel-structures"; - -export class FormulaireDever extends FormulaireParallelStructure { - constructor() { - super(); - } -} diff --git a/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts b/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts index b8f6b3543bb9423c8e80538257240822920a347b..586bd933087e2fbf390f25c96277c26fd90463df 100644 --- a/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts +++ b/src/app/formulaire/definition/concrete/form-lechapt-calmon.ts @@ -1,64 +1,15 @@ -import { CalculatorType, ComputeNodeType, Observer } from "jalhyd"; - -import { FormResultFixedVar } from "../form-result-fixedvar"; -import { FormDefFixedVar } from "../form-def-fixedvar"; -import { FormulaireDefinition } from "../form-definition"; -import { CalculatorResults } from "../../../results/calculator-results"; -import { FormDefParamToCalculate } from "../form-def-paramcalc"; +import { Observer } from "jalhyd"; import { SelectField } from "../../select-field"; -import { FormComputeFixedVar } from "../form-compute-fixedvar"; - -export class FormulaireLechaptCalmon extends FormulaireDefinition implements Observer { - private _formFixedVar: FormDefFixedVar; - - private _formParamCalc: FormDefParamToCalculate; +import { FormulaireBase } from "./form-base"; - private _formCompute: FormComputeFixedVar; - - private _formResult: FormResultFixedVar; - - constructor() { - super(); - this._formFixedVar = new FormDefFixedVar(this); - this._formParamCalc = new FormDefParamToCalculate(this); - this._formResult = new FormResultFixedVar(this, false); - this._formCompute = new FormComputeFixedVar(this, this._formResult); - } - - protected initParse() { - this._formParamCalc.initParse(); - } +export class FormulaireLechaptCalmon extends FormulaireBase implements Observer { protected completeParse(json: {}) { - this._formParamCalc.parseOptions(json); + super.completeParse(json); // abonnement au changement de valeur du select de matériau this.getFormulaireNodeById("select_material").addObserver(this); } - /** - * gestion du clic sur les radios "paramètre fixé, à varier, à calculer" - */ - public onRadioClick(info: string) { - super.onRadioClick(info); - this._formParamCalc.onRadioClick(info); - } - - public resetResults() { - this._formResult.resetResults(); - } - - public doCompute() { - this._formCompute.doCompute(); - } - - public get hasResults(): boolean { - return this._formResult.hasResults; - } - - public get results(): CalculatorResults[] { - return this._formResult.results; - } - // interface Observer public update(sender: any, data: any) { diff --git a/src/app/formulaire/definition/concrete/form-passe-bassin-dim.ts b/src/app/formulaire/definition/concrete/form-passe-bassin-dim.ts deleted file mode 100644 index 5236e6d6d513083a1b6e2f4a7703a8df07293643..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/concrete/form-passe-bassin-dim.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { CalculatorType, ComputeNodeType } from "jalhyd"; - -import { CalculatorResults } from "../../../results/calculator-results"; -import { FormulaireDefinition } from "../form-definition"; -import { FormDefFixedVar } from "../form-def-fixedvar"; -import { FormDefParamToCalculate } from "../form-def-paramcalc"; -import { FormResultFixedVar } from "../form-result-fixedvar"; -import { FormComputeFixedVar } from "../form-compute-fixedvar"; - -export class FormulairePasseBassinDimensions extends FormulaireDefinition { - private _formFixedVar: FormDefFixedVar; - - private _formParamCalc: FormDefParamToCalculate; - - private _formCompute: FormComputeFixedVar; - - private _formResult: FormResultFixedVar; - - constructor() { - super(); - this._formFixedVar = new FormDefFixedVar(this); - this._formParamCalc = new FormDefParamToCalculate(this); - this._formResult = new FormResultFixedVar(this, false); - this._formCompute = new FormComputeFixedVar(this, this._formResult); - } - - protected initParse() { - this._formParamCalc.initParse(); - } - - protected completeParse(json: {}) { - this._formParamCalc.parseOptions(json); - } - - /** - * gestion du clic sur les radios "paramètre fixé, à varier, à calculer" - */ - public onRadioClick(info: string) { - super.onRadioClick(info); - this._formParamCalc.onRadioClick(info); - } - - public resetResults() { - this._formResult.resetResults(); - } - - public doCompute() { - this._formCompute.doCompute(); - } - - public get hasResults(): boolean { - return this._formResult.hasResults; - } - - public get results(): CalculatorResults[] { - return this._formResult.results; - } -} diff --git a/src/app/formulaire/definition/concrete/form-passe-bassin-puissance.ts b/src/app/formulaire/definition/concrete/form-passe-bassin-puissance.ts deleted file mode 100644 index cdaa2e16902991f33a976f85474db5cf8f6588f8..0000000000000000000000000000000000000000 --- a/src/app/formulaire/definition/concrete/form-passe-bassin-puissance.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { CalculatorType, ComputeNodeType } from "jalhyd"; - -import { FormDefFixedVar } from "../form-def-fixedvar"; -import { FormResultFixedVar } from "../form-result-fixedvar"; -import { FormulaireDefinition } from "../form-definition"; -import { CalculatorResults } from "../../../results/calculator-results"; -import { FormDefParamToCalculate } from "../form-def-paramcalc"; -import { FormComputeFixedVar } from "../form-compute-fixedvar"; - -export class FormulairePasseBassinPuissance extends FormulaireDefinition { - private _formFixedVar: FormDefFixedVar; - - private _formParamCalc: FormDefParamToCalculate; - - private _formCompute: FormComputeFixedVar; - - private _formResult: FormResultFixedVar; - - constructor() { - super(); - this._formFixedVar = new FormDefFixedVar(this); - this._formParamCalc = new FormDefParamToCalculate(this); - this._formResult = new FormResultFixedVar(this, false); - this._formCompute = new FormComputeFixedVar(this, this._formResult); - } - - protected initParse() { - this._formParamCalc.initParse(); - } - - protected completeParse(json: {}) { - this._formParamCalc.parseOptions(json); - } - - /** - * gestion du clic sur les radios "paramètre fixé, à varier, à calculer" - */ - public onRadioClick(info: string) { - super.onRadioClick(info); - this._formParamCalc.onRadioClick(info); - } - - public resetResults() { - this._formResult.resetResults(); - } - - public doCompute() { - this._formCompute.doCompute(); - } - - public get hasResults(): boolean { - return this._formResult.hasResults; - } - - public get results(): CalculatorResults[] { - return this._formResult.results; - } -} diff --git a/src/app/services/formulaire/formulaire.service.ts b/src/app/services/formulaire/formulaire.service.ts index e5d27da4b176eb978a80a8340b852d1faf4a7272..e6570d34fbaf970365ac24660d389b6c70030b76 100644 --- a/src/app/services/formulaire/formulaire.service.ts +++ b/src/app/services/formulaire/formulaire.service.ts @@ -15,13 +15,11 @@ import { InputField } from "../../formulaire/input-field"; import { SelectField } from "../../formulaire/select-field"; import { CheckField } from "../../formulaire/check-field"; import { StringMap } from "../../stringmap"; -import { FormulaireConduiteDistributrice } from "../../formulaire/definition/concrete/form-cond-distri"; +import { FormulaireBase } from "../../formulaire/definition/concrete/form-base"; import { FormulaireLechaptCalmon } from "../../formulaire/definition/concrete/form-lechapt-calmon"; import { FormulaireSectionParametree } from "../../formulaire/definition/concrete/form-section-parametree"; import { FormulaireCourbeRemous } from "../../formulaire/definition/concrete/form-courbe-remous"; import { FormulaireRegimeUniforme } from "../../formulaire/definition/concrete/form-regime-uniforme"; -import { FormulairePasseBassinDimensions } from "../../formulaire/definition/concrete/form-passe-bassin-dim"; -import { FormulairePasseBassinPuissance } from "../../formulaire/definition/concrete/form-passe-bassin-puissance"; import { FormulaireParallelStructure } from "../../formulaire/definition/concrete/form-parallel-structures"; import { NgParameter } from "../../formulaire/ngparam"; @@ -110,7 +108,10 @@ export class FormulaireService extends Observable { let f: FormulaireDefinition; switch (ct) { case CalculatorType.ConduiteDistributrice: - f = new FormulaireConduiteDistributrice(); + case CalculatorType.PabDimensions: + case CalculatorType.PabPuissance: + case CalculatorType.MacroRugo: + f = new FormulaireBase(); break; case CalculatorType.LechaptCalmon: @@ -129,14 +130,6 @@ export class FormulaireService extends Observable { f = new FormulaireCourbeRemous(); break; - case CalculatorType.PabDimensions: - f = new FormulairePasseBassinDimensions(); - break; - - case CalculatorType.PabPuissance: - f = new FormulairePasseBassinPuissance(); - break; - case CalculatorType.ParallelStructure: case CalculatorType.Dever: case CalculatorType.Cloisons: @@ -295,6 +288,9 @@ export class FormulaireService extends Observable { case CalculatorType.Cloisons: return "app/calculators/cloisons/cloisons."; + case CalculatorType.MacroRugo: + return "app/calculators/macrorugo/macrorugo."; + default: throw new Error("FormulaireService.getConfigPathPrefix() : valeur de CalculatorType " + ct + " non implémentée"); } diff --git a/src/app/services/internationalisation/internationalisation.service.ts b/src/app/services/internationalisation/internationalisation.service.ts index b9e16a4570be080cfe7e87dce10e05199fdb9665..3d571aa73dfef737f65f017f8389b1fb96fb9eb1 100644 --- a/src/app/services/internationalisation/internationalisation.service.ts +++ b/src/app/services/internationalisation/internationalisation.service.ts @@ -214,19 +214,15 @@ export class InternationalisationService extends Observable { } /** - * met en forme ou traduit un résultat en fonction du libellé qui l'accompagne - * @todo Il manque un formalisme clair permettant de différencier les valeurs numériques des ENUM + * Met en forme un extraResult en fonction du libellé qui l'accompagne + * Les extraResult avec le terme "ENUM_" sont traduit avec le message INFO_EXTRARES_ENUM_[Nom de la variable après ENUM_] */ public formatResult(label: string, value: number): string { - const match = this.parseLabel(label); - if (match) { - if (match[3] !== "Q") { // Le débit est une valeur numérique, tous les autres sont des ENUM ??? - // Label du type ouvrage[n].XXX => message INFO_EXTRARES_ENUM_OUVRAGE_XXX_value - return this.localizeText(`INFO_EXTRARES_ENUM_${match[1].toUpperCase()}_${match[3].toUpperCase()}_${value}`); - } + const match = label.indexOf("ENUM_"); + if (match > -1) { + return this.localizeText(`INFO_EXTRARES_${label.substring(match).toUpperCase()}_${value}`); } - const appSetupService = ServiceFactory.instance.applicationSetupService; - const nDigits = appSetupService.displayDigits; + const nDigits = ServiceFactory.instance.applicationSetupService.displayDigits; return value.toFixed(nDigits); } diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index 754e065bf0ea54b2ac3eaedd841311a5bfd794a3..01e69db11bc9fde4f4effc872fd0e6d299e02c3f 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -28,25 +28,31 @@ "ERROR_SECTION_NON_CONVERGENCE_NEWTON_HNORMALE": "Non convergence of the calculation of the normal depth (Newton's method)", "ERROR_SECTION_NON_CONVERGENCE_NEWTON_HTOR": "Non convergence of the calculation of the corresponding height (Newton's method) for the calculation of the supercritical depth", "ERROR_SECTION_PENTE_NEG_NULLE_HNORMALE_INF": "The slope is negative or zero, the normal depth is infinite", + "ERROR_STRUCTURE_Q_TROP_ELEVE": "The flow passing through the other devices is too high: the requested parameter is not calculable.", "INFO_CALCULATOR_CALCULER": "Compute", "INFO_CALCULATOR_PARAMFIXES": "Fixed parameters", "INFO_CALCULATOR_VALEURS": "Values", + "INFO_CLOISONS_TITRE": "Fish ladder: Cross walls", "INFO_CLOSE_DIALOGUE_TEXT": "Warning ! Parameters and results will be lost. Really close?", "INFO_CLOSE_DIALOGUE_TITRE": "Please confirm", "INFO_CONDUITEDISTRIBUTRICE_TITRE": "Distributor pipe", "INFO_COURBEREMOUS_TITRE": "Backwater curves", "INFO_DEVER_TITRE": "Free flow weir stage-discharge laws", - "INFO_EXTRARES_ENUM_OUVRAGE_Q_MODE_0": "Weir", - "INFO_EXTRARES_ENUM_OUVRAGE_Q_MODE_1": "Orifice", - "INFO_EXTRARES_ENUM_OUVRAGE_Q_MODE_2": "Zero flow", - "INFO_EXTRARES_ENUM_OUVRAGE_Q_REGIME_0": "Free flow", - "INFO_EXTRARES_ENUM_OUVRAGE_Q_REGIME_1": "Partially submerged", - "INFO_EXTRARES_ENUM_OUVRAGE_Q_REGIME_2": "Submerged", - "INFO_EXTRARES_ENUM_OUVRAGE_Q_REGIME_3": "Zero flow", + "INFO_EXTRARES_ENUM_MACRORUGOFLOWTYPE_0": "Emergent", + "INFO_EXTRARES_ENUM_MACRORUGOFLOWTYPE_1": "Quasi-emergent", + "INFO_EXTRARES_ENUM_MACRORUGOFLOWTYPE_2": "Submerged", + "INFO_EXTRARES_ENUM_STRUCTUREFLOWMODE_0": "Weir", + "INFO_EXTRARES_ENUM_STRUCTUREFLOWMODE_1": "Orifice", + "INFO_EXTRARES_ENUM_STRUCTUREFLOWMODE_2": "Zero flow", + "INFO_EXTRARES_ENUM_STRUCTUREFLOWREGIME_0": "Free flow", + "INFO_EXTRARES_ENUM_STRUCTUREFLOWREGIME_1": "Partially submerged", + "INFO_EXTRARES_ENUM_STRUCTUREFLOWREGIME_2": "Submerged", + "INFO_EXTRARES_ENUM_STRUCTUREFLOWREGIME_3": "Zero flow", "INFO_EXTRARES_LIB_B": "Surface width (m)", "INFO_EXTRARES_LIB_CV": "Cv: Velocity coefficient", "INFO_EXTRARES_LIB_CVQT": "CV.QT: Corrected discharge (m³/s)", "INFO_EXTRARES_LIB_EC": "EC: Kinetic energy (m)", + "INFO_EXTRARES_LIB_ENUM_MACRORUGOFLOWTYPE": "Flow type", "INFO_EXTRARES_LIB_FLU": "Subcritical water line", "INFO_EXTRARES_LIB_FR": "Froude number", "INFO_EXTRARES_LIB_HS": "Specific head (m)", @@ -58,24 +64,44 @@ "INFO_EXTRARES_LIB_OUVRAGE_Q_MODE": "Mode", "INFO_EXTRARES_LIB_OUVRAGE_Q_REGIME": "Regime", "INFO_EXTRARES_LIB_P": "Wetted perimeter (m)", + "INFO_EXTRARES_LIB_PV": "Volumic dissipated power (W/m³)", "INFO_EXTRARES_LIB_Q": "Flow (m³/s)", + "INFO_EXTRARES_LIB_Q_GUIDETECH": "Technical guide flow (m³/s)", "INFO_EXTRARES_LIB_R": "Hydraulic radius (m)", "INFO_EXTRARES_LIB_S": "Wetted area (m²)", "INFO_EXTRARES_LIB_TAU0": "Tractive force (Pa)", "INFO_EXTRARES_LIB_TOR": "Supercritical water line", "INFO_EXTRARES_LIB_V": "Average speed (m/s)", + "INFO_EXTRARES_LIB_V_GUIDETECH": "Technical guide speed (m/s)", + "INFO_EXTRARES_LIB_VDEB": "Conveyance speed (m/s)", + "INFO_EXTRARES_LIB_VMAX": "Maximal speed (m/s)", "INFO_EXTRARES_LIB_YC": "Critical depth (m)", "INFO_EXTRARES_LIB_YCO": "Conjugate depth (m)", "INFO_EXTRARES_LIB_YF": "Subcritical depth (m)", "INFO_EXTRARES_LIB_YN": "Normal depth (m)", "INFO_EXTRARES_LIB_YT": "Supercritical depth (m)", + "INFO_EXTRARES_LIB_ZF2": "Downstream bottom elevation (m)", "INFO_LECHAPTCALMON_TITRE": "Lechapt-Calmon", + "INFO_LIB_ALPHA": "Alpha coefficient", + "INFO_LIB_BETA": "Beta coefficient", + "INFO_LIB_CD": "Discharge coefficient", + "INFO_LIB_BT": "Half opening of the triangle (m)", "INFO_LIB_FS_PARAM_CALC": "Calculation parameters", + "INFO_LIB_FS_OUVRAGE": "Device", + "INFO_LIB_L": "Weir width", "INFO_LIB_PR": "Display accuracy", + "INFO_LIB_Q": "Discharge", "INFO_LIB_SELECT_LOIDEBIT": "Stage-discharge law", + "INFO_LIB_SELECT_LOIDEBIT1_KIVI": "Kindsvater-Carter and Villemonte", + "INFO_LIB_SELECT_OUVRAGE": "Device", + "INFO_LIB_SELECT_OUVRAGE_SEUIL_RECT": "Rectangular weir", + "INFO_LIB_ZDV": "Crest weir elevation or gate base", + "INFO_LIB_ZRAM": "Upstream apron elevation (m)", + "INFO_LIB_ZT": "Triangle top elevation (m)", "INFO_MENU_HELP_TITLE": "Help", "INFO_MENU_LOAD_SESSION_TITLE": "Load session", - "INFO_MENU_NOUVELLE_CALC": "New calculator", + "INFO_MENU_NOUVELLE_CALC": "New calculation module", + "INFO_MACRORUGO_TITRE": "Rock-ramp fishpasses", "INFO_OPTION_NO": "No", "INFO_OPTION_YES": "Yes", "INFO_OUVRAGE": "Structure", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index 6dfeaa6a039ce6020eeb68d249d702ada50aa83f..cd700e267286a4ab7e0a38c2af12f168cce5a949 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -38,17 +38,21 @@ "INFO_CONDUITEDISTRIBUTRICE_TITRE": "Conduite distributrice", "INFO_COURBEREMOUS_TITRE": "Courbes de remous", "INFO_DEVER_TITRE": "Lois de déversoirs dénoyés", - "INFO_EXTRARES_ENUM_OUVRAGE_Q_MODE_0": "Surface libre", - "INFO_EXTRARES_ENUM_OUVRAGE_Q_MODE_1": "En charge", - "INFO_EXTRARES_ENUM_OUVRAGE_Q_MODE_2": "Débit nul", - "INFO_EXTRARES_ENUM_OUVRAGE_Q_REGIME_0": "Dénoyé", - "INFO_EXTRARES_ENUM_OUVRAGE_Q_REGIME_1": "Partiellement noyé", - "INFO_EXTRARES_ENUM_OUVRAGE_Q_REGIME_2": "Noyé", - "INFO_EXTRARES_ENUM_OUVRAGE_Q_REGIME_3": "Débit nul", + "INFO_EXTRARES_ENUM_MACRORUGOFLOWTYPE_0": "Emergent", + "INFO_EXTRARES_ENUM_MACRORUGOFLOWTYPE_1": "Quasi-émergent", + "INFO_EXTRARES_ENUM_MACRORUGOFLOWTYPE_2": "Immergé", + "INFO_EXTRARES_ENUM_STRUCTUREFLOWMODE_0": "Surface libre", + "INFO_EXTRARES_ENUM_STRUCTUREFLOWMODE_1": "En charge", + "INFO_EXTRARES_ENUM_STRUCTUREFLOWMODE_2": "Débit nul", + "INFO_EXTRARES_ENUM_STRUCTUREFLOWREGIME_0": "Dénoyé", + "INFO_EXTRARES_ENUM_STRUCTUREFLOWREGIME_1": "Partiellement noyé", + "INFO_EXTRARES_ENUM_STRUCTUREFLOWREGIME_2": "Noyé", + "INFO_EXTRARES_ENUM_STRUCTUREFLOWREGIME_3": "Débit nul", "INFO_EXTRARES_LIB_B": "Largeur au miroir (m)", "INFO_EXTRARES_LIB_CV": "Cv: Coefficient de vitesse d'approche", "INFO_EXTRARES_LIB_CVQT": "CV.QT: Débit corrigé (m³/s)", "INFO_EXTRARES_LIB_EC": "EC: Énergie cinétique (m)", + "INFO_EXTRARES_LIB_ENUM_MACRORUGOFLOWTYPE": "Type d'écoulement", "INFO_EXTRARES_LIB_FLU": "Ligne d'eau fluviale", "INFO_EXTRARES_LIB_FR": "Froude", "INFO_EXTRARES_LIB_HS": "Charge spécifique (m)", @@ -57,40 +61,47 @@ "INFO_EXTRARES_LIB_IMP": "Impulsion (N)", "INFO_EXTRARES_LIB_J": "Perte de charge (m)", "INFO_EXTRARES_LIB_OUVRAGE_Q": "Débit (m³/s)", - "INFO_EXTRARES_LIB_OUVRAGE_Q_MODE": "Type d'écoulement", - "INFO_EXTRARES_LIB_OUVRAGE_Q_REGIME": "Régime", + "INFO_EXTRARES_LIB_OUVRAGE_Q_ENUM_STRUCTUREFLOWMODE": "Type d'écoulement", + "INFO_EXTRARES_LIB_OUVRAGE_Q_ENUM_STRUCTUREFLOWREGIME": "Régime", "INFO_EXTRARES_LIB_P": "Périmètre mouillé (m)", "INFO_EXTRARES_LIB_PV": "Puissance volumique dissipée (W/m³)", "INFO_EXTRARES_LIB_Q": "Débit (m³/s)", + "INFO_EXTRARES_LIB_Q_GUIDETECH": "Débit Guide technique (m³/s)", "INFO_EXTRARES_LIB_R": "Rayon hydraulique (m)", "INFO_EXTRARES_LIB_S": "Surface mouillée (m²)", "INFO_EXTRARES_LIB_TAU0": "Force tractrice (Pa)", "INFO_EXTRARES_LIB_TOR": "Ligne d'eau torrentielle", "INFO_EXTRARES_LIB_V": "Vitesse moyenne (m/s)", + "INFO_EXTRARES_LIB_V_GUIDETECH": "Vitesse Guide technique (m/s)", + "INFO_EXTRARES_LIB_VDEB": "Vitesse débitante (m/s)", + "INFO_EXTRARES_LIB_VMAX": "Vitesse maximale (m/s)", "INFO_EXTRARES_LIB_YC": "Tirant d'eau critique (m)", "INFO_EXTRARES_LIB_YCO": "Tirant d'eau conjugué (m)", "INFO_EXTRARES_LIB_YF": "Tirant d'eau fluvial (m)", "INFO_EXTRARES_LIB_YN": "Tirant d'eau normal (m)", "INFO_EXTRARES_LIB_YT": "Tirant d'eau torrentiel (m)", + "INFO_EXTRARES_LIB_ZF2": "Cote de fond aval (m)", "INFO_LECHAPTCALMON_TITRE": "Lechapt-Calmon", + "INFO_LIB_ALPHA": "Coefficient alpha", + "INFO_LIB_BETA": "Coefficient béta", + "INFO_LIB_CD": "Coefficient de débit", "INFO_LIB_BT": "Demi-ouverture du triangle (m)", "INFO_LIB_FS_PARAM_CALC": "Paramètres de calcul", "INFO_LIB_FS_OUVRAGE": "Ouvrage", + "INFO_LIB_L": "Largeur du déversoir", "INFO_LIB_PR": "Précision de calcul", + "INFO_LIB_Q": "Débit", "INFO_LIB_SELECT_LOIDEBIT": "Loi de débit", "INFO_LIB_SELECT_LOIDEBIT1_KIVI": "Kindsvater-Carter et Villemonte", "INFO_LIB_SELECT_OUVRAGE": "Ouvrage", "INFO_LIB_SELECT_OUVRAGE_SEUIL_RECT": "Seuil rectangulaire", "INFO_LIB_ZDV": "Cote de la crête du déversoir ou du radier de la vanne", - "INFO_LIB_L": "Largeur du déversoir (m)", - "INFO_LIB_CD": "Coefficient de débit", - "INFO_LIB_ALPHA": "Coefficient alpha", - "INFO_LIB_BETA": "Coefficient béta", "INFO_LIB_ZRAM": "Cote du radier amont (m)", "INFO_LIB_ZT": "Cote haute du triangle (m)", "INFO_MENU_HELP_TITLE": "Aide", "INFO_MENU_LOAD_SESSION_TITLE": "Charger une session", "INFO_MENU_NOUVELLE_CALC": "Nouveau module de calcul", + "INFO_MACRORUGO_TITRE": "Passe à macro-rugosité", "INFO_OPTION_NO": "Non", "INFO_OPTION_YES": "Oui", "INFO_OUVRAGE": "Ouvrage",