diff --git a/e2e/calculate-all-params.e2e-spec.ts b/e2e/calculate-all-params.e2e-spec.ts index 295e133ad0e42466d968cb3ca517eb6add7445f2..6f5632baf39b9aacf2333cb68154865592796f64 100644 --- a/e2e/calculate-all-params.e2e-spec.ts +++ b/e2e/calculate-all-params.e2e-spec.ts @@ -18,7 +18,7 @@ describe("ngHyd − calculate all parameters of all calculators", () => { }); // get calculators list (IDs) @TODO read it from config, but can't import jalhyd here :/ - const calcTypes = [ 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15, 17, 18, 19, 20 ]; + const calcTypes = [ 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15, 17, 18, 19, 20, 21 ]; // for each calculator for (const ct of calcTypes) { diff --git a/e2e/check-translations.e2e-spec.ts b/e2e/check-translations.e2e-spec.ts index ed3ac2dacf0bc99d5b7e6373c04cd7d05e54d03c..2aef4ff34220586ff8209a79fdc03202028d900e 100644 --- a/e2e/check-translations.e2e-spec.ts +++ b/e2e/check-translations.e2e-spec.ts @@ -25,7 +25,7 @@ describe("ngHyd − check translation of all calculators", () => { }); // get calculators list (IDs) @TODO read it from config, but can't import jalhyd here :/ - const calcTypes = [ 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15, 17, 18, 19, 20 ]; + const calcTypes = [ 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15, 17, 18, 19, 20, 21 ]; // options of "Language" selector on preferences page const langs = [ "English", "Français" ]; diff --git a/e2e/clone-all-calc.e2e-spec.ts b/e2e/clone-all-calc.e2e-spec.ts index f74d61e78c2ded94acd930995882ff26117e84da..e5b77dcd1b84d0d34687a628f4c52f930eab779b 100644 --- a/e2e/clone-all-calc.e2e-spec.ts +++ b/e2e/clone-all-calc.e2e-spec.ts @@ -18,7 +18,7 @@ describe("ngHyd − clone all calculators with all possible <select> values", () }); // get calculators list (IDs) @TODO read it from config, but can't import jalhyd here :/ - const calcTypes = [ 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15, 17, 18, 19, 20 ]; + const calcTypes = [ 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 15, 17, 18, 19, 20, 21 ]; // for each calculator for (const ct of calcTypes) { diff --git a/jalhyd_branch b/jalhyd_branch index 7f8147304dea3e5f1ef135be121d42f63648ed3f..0c6550147d6ae5cd2a34cbe0d6523c6fde1c533a 100644 --- a/jalhyd_branch +++ b/jalhyd_branch @@ -1 +1 @@ -146-passer-les-courbes-de-remous-en-cote +55-ajout-d-un-module-de-calcul-des-cotes-amont-aval-d-un-bief diff --git a/src/app/calculators/bief/bief.config.json b/src/app/calculators/bief/bief.config.json new file mode 100644 index 0000000000000000000000000000000000000000..58561811fb3b2cede61ea70cd6690707f478e113 --- /dev/null +++ b/src/app/calculators/bief/bief.config.json @@ -0,0 +1,70 @@ +[ + { + "id": "fs_water_line", + "type": "fieldset", + "fields": [ + { + "id": "select_regime", + "type": "select", + "source": "bief_regime" + } + ] + }, + { + "id": "fs_section", + "type": "fieldset", + "fields": [ + { + "id": "select_section", + "type": "select", + "help": { + "SectionRectangle": "hsl/types_sections.html#section-rectangulaire", + "SectionCercle": "hsl/types_sections.html#section-circulaire", + "SectionTrapeze": "hsl/types_sections.html#section-trapezoidale", + "SectionPuissance": "hsl/types_sections.html#section-parabolique" + }, + "source": "acsection_section" + }, + "LargeurFond", + "Fruit", + "LargeurBerge", + "D", + "k" + ] + }, + { + "id": "fs_bief", + "type": "fieldset", + "fields": [ + "Ks", + "Long", + "YB", + "ZF1", + "ZF2" + ] + }, + { + "id": "fs_condlim", + "type": "fieldset", + "fields": [ + "Q", + "Z1", + "Z2" + ] + }, + { + "id": "fs_param_calc", + "type": "fieldset", + "fields": [ + "Dx" + ] + }, + { + "type": "options", + "defaultNodeType": "SectionRectangle", + "defaultRegime": "Fluvial", + "sectionSourceId": "select_section", + "regimeSelectId": "select_regime", + "help": "hsl/bief.html" + } +] \ No newline at end of file diff --git a/src/app/calculators/bief/bief.en.json b/src/app/calculators/bief/bief.en.json new file mode 100644 index 0000000000000000000000000000000000000000..056d2873002dba19ea3ab322a185f7c413259a4c --- /dev/null +++ b/src/app/calculators/bief/bief.en.json @@ -0,0 +1,35 @@ +{ + "fs_water_line": "Type of water line", + "select_regime": "Regime", + + "select_regime_0": "Fluvial", + "select_regime_1": "Torrential", + + "fs_section": "Type of section", + "select_section": "Choice of section type", + + "select_section_SectionTrapeze": "Trapezoidal", + "select_section_SectionRectangle": "Rectangular", + "select_section_SectionCercle": "Circular", + "select_section_SectionPuissance": "Parabolic", + + "LargeurFond": "Width at bottom", + "Fruit": "Bank slope", + "D": "Diameter", + "k": "Coefficient", + "LargeurBerge": "Width at embankment level", + "fs_bief": "Reach features", + "Ks": "Strickler coefficient", + "Hs": "Head", + "Long": "Length of reach", + "YB": "Embankment elevation", + "fs_condlim": "Boundary conditions", + "Q": "Upstream flow", + "S": "Wet surface", + "fs_param_calc": "Calculation parameters", + "Dx": "Discretisation step", + "Z1": "Upstream water elevation", + "Z2": "Downstream water elevation", + "ZF1": "Upstream bottom elevation", + "ZF2": "Downstream bottom elevation" +} \ No newline at end of file diff --git a/src/app/calculators/bief/bief.fr.json b/src/app/calculators/bief/bief.fr.json new file mode 100644 index 0000000000000000000000000000000000000000..f22d1f0240caff2b34f64ce0d5b458624d6c6e5c --- /dev/null +++ b/src/app/calculators/bief/bief.fr.json @@ -0,0 +1,35 @@ +{ + "fs_water_line": "Type de ligne d'eau", + "select_regime": "Régime", + + "select_regime_0": "Fluvial", + "select_regime_1": "Torrentiel", + + "fs_section": "Type de section", + "select_section": "Choix du type de section", + + "select_section_SectionTrapeze": "Trapézoïdale", + "select_section_SectionRectangle": "Rectangulaire", + "select_section_SectionCercle": "Circulaire", + "select_section_SectionPuissance": "Parabolique", + + "LargeurFond": "Largeur au fond", + "Fruit": "Fruit des berges", + "D": "Diamètre", + "k": "Coefficient", + "LargeurBerge": "Largeur de berge", + "fs_bief": "Caractéristiques du bief", + "Ks": "Coefficient de Strickler", + "Hs": "Charge", + "Long": "Longueur du bief", + "YB": "Hauteur de berge", + "fs_condlim": "Conditions aux limites", + "Q": "Débit amont", + "S": "Surface mouillée", + "Dx": "Pas de discrétisation", + "fs_param_calc": "Paramètres de calcul", + "Z1": "Cote de l'eau à l'amont", + "Z2": "Cote de l'eau à l'aval", + "ZF1": "Cote du fond à l'amont", + "ZF2": "Cote du fond à l'aval" +} \ No newline at end of file diff --git a/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts b/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts index d581f63e406716c8b1cc513c47e231dcc59d1f31..41258994dd9647bd24fd859427cdbfc82881acaa 100644 --- a/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts +++ b/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts @@ -205,7 +205,12 @@ export class DialogEditParamValuesComponent implements OnInit { public get numberOfValues(): number { if (this.isMinMax) { - return this.param.paramDefinition.getInferredValuesList().length; + try { + return this.param.paramDefinition.getInferredValuesList().length; + } catch (e) { + // min > max or something, silent fail + return 0; + } } else { // values are not set before closing modal return this.buildNumbersListFromString(this.valuesListForm.controls.valuesList.value).length; diff --git a/src/app/components/generic-calculator/calculator.component.html b/src/app/components/generic-calculator/calculator.component.html index 2cde586a44cc4a875fc0082e6391d2052535b419..b8d29a5a355874bc7ff7d625115a23997a3fed64 100644 --- a/src/app/components/generic-calculator/calculator.component.html +++ b/src/app/components/generic-calculator/calculator.component.html @@ -104,6 +104,15 @@ {{ uitextGeneratePAB }} </button> + <div *ngIf="isBief" class="multi-buttons-container"> + <button mat-raised-button color="accent" id="generate-sp-amont" (click)="generateSPAmont()"> + {{ uitextGenerateSPAmont }} + </button> + <button mat-raised-button color="accent" id="generate-sp-aval" (click)="generateSPAval()"> + {{ uitextGenerateSPAval }} + </button> + </div> + <mat-card-content> <calc-results id="resultsComp" (afterViewChecked)="onCalcResultsViewChecked()"></calc-results> </mat-card-content> diff --git a/src/app/components/generic-calculator/calculator.component.scss b/src/app/components/generic-calculator/calculator.component.scss index b520db9c9a1cc298d0e0bbd4aebbe2514c1fbfba..e48960ad064734b2ff927bf1da07ba94607d8387 100644 --- a/src/app/components/generic-calculator/calculator.component.scss +++ b/src/app/components/generic-calculator/calculator.component.scss @@ -66,6 +66,15 @@ mat-card { height: min-content; } } + + .multi-buttons-container { + button:nth-of-type(even) { + margin-top: .5em; + } + button:nth-of-type(odd) { + margin-right: .5em; + } + } } ::ng-deep .mat-card-header-text { diff --git a/src/app/components/generic-calculator/calculator.component.ts b/src/app/components/generic-calculator/calculator.component.ts index 4bdf8c67512ca356aedb8942187b45b1b4c90567..f655bd60f4a0b8a1e8b0fa6ecdee99114f39663a 100644 --- a/src/app/components/generic-calculator/calculator.component.ts +++ b/src/app/components/generic-calculator/calculator.component.ts @@ -2,7 +2,7 @@ import { Component, OnInit, DoCheck, OnDestroy, ViewChild, ViewChildren, QueryList, AfterViewChecked, ElementRef, Inject, forwardRef } from "@angular/core"; import { ActivatedRoute, Router } from "@angular/router"; -import { Observer, Session, Cloisons, Pab, ParamValueMode, CalculatorType } from "jalhyd"; +import { Observer, Session, Cloisons, Pab, ParamValueMode, CalculatorType, Bief, SectionParametree, acSection, round, SessionSettings } from "jalhyd"; import { AppComponent } from "../../app.component"; import { FormulaireService } from "../../services/formulaire.service"; @@ -195,6 +195,14 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe return this.intlService.localizeText("INFO_CALCULATOR_RESULTS_GENERATE_PAB"); } + public get uitextGenerateSPAmont() { + return this.intlService.localizeText("INFO_CALCULATOR_RESULTS_GENERATE_SP_AMONT"); + } + + public get uitextGenerateSPAval() { + return this.intlService.localizeText("INFO_CALCULATOR_RESULTS_GENERATE_SP_AVAL"); + } + public get uitextOpenHelp() { return this.intlService.localizeText("INFO_CALCULATOR_OPEN_HELP"); } @@ -497,6 +505,15 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe return this._formulaire && this._formulaire.helpLink; } + /** return true if current Nub type is ct */ + public is(ct: CalculatorType): boolean { + return ( + this._formulaire + && this._formulaire.currentNub + && this._formulaire.currentNub.calcType === ct + ); + } + // for "one wide column" layout public get isWide() { return (this.isPAB || this.isMRC); @@ -504,38 +521,27 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe // true if current Nub is PAB public get isPAB() { - return ( - this._formulaire - && this._formulaire.currentNub - && this._formulaire.currentNub.calcType === CalculatorType.Pab - ); + return this.is(CalculatorType.Pab); } // true if current Nub is MacroRugoCompound public get isMRC() { - return ( - this._formulaire - && this._formulaire.currentNub - && this._formulaire.currentNub.calcType === CalculatorType.MacroRugoCompound - ); + return this.is(CalculatorType.MacroRugoCompound); } // true if current Nub is Jet public get isJet() { - return ( - this._formulaire - && this._formulaire.currentNub - && this._formulaire.currentNub.calcType === CalculatorType.Jet - ); + return this.is(CalculatorType.Jet); } // for "generate PAB" button public get isPABCloisons() { - return ( - this._formulaire - && this._formulaire.currentNub - && this._formulaire.currentNub.calcType === CalculatorType.Cloisons - ); + return this.is(CalculatorType.Cloisons); + } + + // true if current Nub is Bief + public get isBief() { + return this.is(CalculatorType.Bief); } /** @@ -611,6 +617,50 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, AfterViewChe }); } + /** + * Génère une SectionParametree à partir des cotes amont du module Bief en cours + */ + public generateSPAmont() { + const bief = (this._formulaire.currentNub as Bief); + this.generateSP(round(bief.prms.Z1.singleValue - bief.prms.ZF1.singleValue, 3)); + } + + /** + * Génère une SectionParametree à partir des cotes aval du module Bief en cours + */ + public generateSPAval() { + const bief = (this._formulaire.currentNub as Bief); + this.generateSP(round(bief.prms.Z2.singleValue - bief.prms.ZF2.singleValue, 3)); + } + + /** + * Génère une SectionParametree à partir du module Bief en cours + * @param Y tirant d'eau + */ + private generateSP(Y: number) { + const bief = (this._formulaire.currentNub as Bief); + const pente = round( + (bief.prms.ZF1.singleValue - bief.prms.ZF2.singleValue) / bief.prms.Long.singleValue, + 5 // ça ou autre chose… + ); + const serialisedSection = bief.section.serialise(); + const sectionCopy = Session.getInstance().unserialiseSingleNub(serialisedSection, false).nub; + const secParam = new SectionParametree(sectionCopy as acSection); + Session.getInstance().registerNub(secParam); + + this.formulaireService.createFormulaire(CalculatorType.SectionParametree, secParam) + .then((f: FormulaireDefinition) => { + const sp = (f.currentNub as SectionParametree); + sp.section.prms.Y.singleValue = Y; + sp.section.prms.If.singleValue = pente; + // calculate + f.doCompute(); + // go to new SP + this.router.navigate(["/calculator", f.uid]).then(); + } + ); + } + public saveCalculator() { this.formulaireService.saveForm(this._formulaire); } diff --git a/src/app/components/remous-results/remous-results.component.ts b/src/app/components/remous-results/remous-results.component.ts index ab9f3f71800041e327cad3c6cec6cc8e0ef655db..a710067a4c938490d3e8bec4e27bf6da4dd3f344 100644 --- a/src/app/components/remous-results/remous-results.component.ts +++ b/src/app/components/remous-results/remous-results.component.ts @@ -393,7 +393,8 @@ export class RemousResultsComponent extends ResultsComponent implements DoCheck } private get abscisseIterator(): INumberIterator { - return this._remousResults.varResults.variatedParameters[0].paramDefinition.valuesIterator; + const param = this._remousResults.varResults.variatedParameters[0].paramDefinition; + return param.paramValues.initValuesIterator(false, undefined, true); // add last step ! } private connectRessaut(lineFlu: LineData, lineTor: LineData) { diff --git a/src/app/config.json b/src/app/config.json index d7fa138742d5c05aa522aa79330249d6c204c733..1b2da220febf7661f5a2d1fed5cf860609dbca72 100644 --- a/src/app/config.json +++ b/src/app/config.json @@ -38,7 +38,7 @@ "path": "surface-libre.jpg", "credits": "David Dorchies / Irstea" }, - "calculators": [ 2, 3, 4, 20 ] + "calculators": [ 2, 3, 4, 20, 21 ] }, { "name": "HYDRAULIQUE_EN_CHARGE", diff --git a/src/app/formulaire/definition/concrete/form-bief.ts b/src/app/formulaire/definition/concrete/form-bief.ts new file mode 100644 index 0000000000000000000000000000000000000000..90edbe1357d1acfa7892966c702b05bbd1e08eb3 --- /dev/null +++ b/src/app/formulaire/definition/concrete/form-bief.ts @@ -0,0 +1,70 @@ +import { IObservable, SectionNub, Session, BiefRegime } from "jalhyd"; + +import { FormDefSection } from "../form-def-section"; +import { FieldSet } from "../../fieldset"; +import { FormulaireBase } from "./form-base"; + +export class FormulaireBief extends FormulaireBase { + + private _formSection: FormDefSection; + + /** id du select configurant le régime */ + private _regimeSelectId: string; + + constructor() { + super(); + this._formSection = new FormDefSection(this); + // default properties + this._props["regime"] = BiefRegime.Fluvial; + } + + protected parseOptions(json: {}) { + super.parseOptions(json); + this._formSection.parseOptions(json); + + // id du select configurant la méthode de résolution + this._regimeSelectId = this.getOption(json, "regimeSelectId"); + } + + public afterParseFieldset(fs: FieldSet) { + this._formSection.afterParseFieldset(fs); + + // si le FieldSet contient le select de méthode de résolution + if (this._regimeSelectId) { + const sel = fs.getFormulaireNodeById(this._regimeSelectId); + if (sel) { + // on abonne le formulaire aux propriétés du FieldSet + fs.properties.addObserver(this); + } + } + } + + // interface Observer + + update(sender: IObservable, data: any) { + + super.update(sender, data); + + if (sender instanceof FieldSet && data.action === "propertyChange") { + switch (sender.id) { + case "fs_section": + // replace underlying section without replacing whole Nub + const newSect = Session.getInstance().createSection(data.value); + (this._currentNub as SectionNub).setSection(newSect); + // reflect changes in GUI + for (const fs of this.allFieldsets) { + // show / hide dependent fields + fs.updateFields(); + } + this.reset(); + break; + + case "fs_water_line": + this.reset(); + // Either Z1 or Z2 is calculable, depending on Regime + this.getFieldsetById("fs_condlim").updateFields(); + break; + } + } + } +} diff --git a/src/app/formulaire/fieldset.ts b/src/app/formulaire/fieldset.ts index 494e64140121f81b1ac62b9bf0e6f90aefa3e021..b5d4978c5be82673ce8d59cccf9b0b20c41c9266 100644 --- a/src/app/formulaire/fieldset.ts +++ b/src/app/formulaire/fieldset.ts @@ -1,6 +1,5 @@ import { CalculatorType, - ComputeNodeType, ParamDefinition, LCMaterial, LoiDebit, @@ -10,6 +9,7 @@ import { MethodeResolution, GrilleType, GrilleProfile, + BiefRegime, } from "jalhyd"; import { FormulaireElement } from "./formulaire-element"; @@ -254,6 +254,10 @@ export class FieldSet extends FormulaireElement implements Observer { case "fs_grille": // Grille this.setSelectValueFromProperty("select_grid_profile", "gridProfile"); break; + + case "fs_water_line": // Bief + this.setSelectValueFromProperty("select_regime", "regime"); + break; } } @@ -315,6 +319,7 @@ export class FieldSet extends FormulaireElement implements Observer { this.setPropertyValueFromConfig(json, "defaultMaterial", "material", LCMaterial); this.setPropertyValueFromConfig(json, "defaultGridProfile", "gridProfile", GrilleProfile); this.setPropertyValueFromConfig(json, "defaultGridType", "gridType", GrilleType); + this.setPropertyValueFromConfig(json, "defaultRegime", "regime", BiefRegime); this.setPropertyValueFromConfig(json, "varCalc", "varCalc"); this.updateFields(); @@ -404,6 +409,9 @@ export class FieldSet extends FormulaireElement implements Observer { case "select_grid_profile": // Grille this.setPropValue("gridProfile", data.value.value); break; + case "select_regime": // Bief + this.setPropValue("regime", data.value.value); + break; } break; } diff --git a/src/app/formulaire/select-field.ts b/src/app/formulaire/select-field.ts index ee83f1ae853c34319ac27a88b04a88ffe06d1dbe..308b319b08bab11b65ededa940cc947143cb7e7c 100644 --- a/src/app/formulaire/select-field.ts +++ b/src/app/formulaire/select-field.ts @@ -1,4 +1,15 @@ -import { LechaptCalmon, acSection, CourbeRemous, Nub, ParallelStructure, StructureType, LoiDebit, GrilleType, GrilleProfile } from "jalhyd"; +import { + BiefRegime, + LechaptCalmon, + acSection, + CourbeRemous, + Nub, + ParallelStructure, + StructureType, + LoiDebit, + GrilleType, + GrilleProfile + } from "jalhyd"; import { Field } from "./field"; import { SelectEntry } from "./select-entry"; @@ -172,6 +183,11 @@ export class SelectField extends Field { this.addEntry(new SelectEntry(this._entriesBaseId + GrilleProfile.Rectangular, GrilleProfile.Rectangular)); this.addEntry(new SelectEntry(this._entriesBaseId + GrilleProfile.Hydrodynamic, GrilleProfile.Hydrodynamic)); break; + + case "bief_regime": // Bief: type de régime + this.addEntry(new SelectEntry(this._entriesBaseId + BiefRegime.Fluvial, BiefRegime.Fluvial)); + this.addEntry(new SelectEntry(this._entriesBaseId + BiefRegime.Torrentiel, BiefRegime.Torrentiel)); + break; } } } diff --git a/src/app/services/formulaire.service.ts b/src/app/services/formulaire.service.ts index 8741f40e1865a7ccc90b525d059a1adddfac36a8..65a60d25bc8ea319c99c4b369e0ce228ff0ba21a 100644 --- a/src/app/services/formulaire.service.ts +++ b/src/app/services/formulaire.service.ts @@ -38,6 +38,7 @@ import { FormulairePab } from "../formulaire/definition/concrete/form-pab"; import { FormulaireMacrorugoCompound } from "../formulaire/definition/concrete/form-macrorugo-compound"; import { FormulaireLechaptCalmon } from "../formulaire/definition/concrete/form-lechapt-calmon"; import { FormulaireGrille } from "../formulaire/definition/concrete/form-grille"; +import { FormulaireBief } from "../formulaire/definition/concrete/form-bief"; @Injectable() export class FormulaireService extends Observable { @@ -82,6 +83,7 @@ export class FormulaireService extends Observable { this.calculatorPaths[CalculatorType.Jet] = "jet"; this.calculatorPaths[CalculatorType.Grille] = "grille"; this.calculatorPaths[CalculatorType.Pente] = "pente"; + this.calculatorPaths[CalculatorType.Bief] = "bief"; } private get _intlService(): I18nService { @@ -323,6 +325,10 @@ export class FormulaireService extends Observable { f = new FormulaireGrille(); break; + case CalculatorType.Bief: + f = new FormulaireBief(); + break; + default: f = new FormulaireBase(); } diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json index e8cbdf1d3a141377537f4acc845dc41418d5d792..d46b196a0e158bd6e1f2c10f8734e5533b04baa7 100644 --- a/src/locale/messages.en.json +++ b/src/locale/messages.en.json @@ -5,6 +5,8 @@ "WARNING_NOTCH_SUBMERSION_GREATER_THAN_07": "Notch formula is discouraged when submersion is greater than 0.7", "WARNING_SLOT_SUBMERSION_NOT_BETWEEN_07_AND_09": "Slot formula is discouraged when submersion is lower than 0.7 or greater than 0.9", "ERROR_ABSTRACT": "%nb% errors occurred during calculation", + "ERROR_BIEF_Z1_CALC_FAILED": "Unable to calculate upstream elevation (calculation interrupted before upstream)", + "ERROR_BIEF_Z2_CALC_FAILED": "Unable to calculate downstream elevation (calculation interrupted before downstream)", "ERROR_DICHO_CONVERGE": "Dichotomy could not converge", "ERROR_DICHO_FUNCTION_VARIATION": "unable to determinate function direction of variation", "ERROR_DICHO_INIT_DOMAIN": "Dichotomy: target %targetSymbol%=%targetValue% does not exist for variable %variableSymbol% valued in interval %variableInterval%", @@ -41,8 +43,9 @@ "ERROR_PARAMDOMAIN_INVALID": "parameter '%symbol%: non supported '%domain%' definition domain", "ERROR_PROBLEM_LOADING_SESSION": "Session loaded, with errors", "ERROR_REMOUS_NO_WATER_LINE": "No water line can be calculated", - "ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT": "Upstream boundary condition < Critical elevation: no possible calculation from upstream", - "ERROR_REMOUS_PAS_CALCUL_DEPUIS_AVAL": "Downstream boundary condition < Critical elevation: no possible calculation from downstream", + "WARNING_REMOUS_PAS_CALCUL_DEPUIS_AMONT": "Upstream boundary condition < Critical elevation: no possible calculation from upstream", + "WARNING_REMOUS_PAS_CALCUL_DEPUIS_AVAL": "Downstream boundary condition < Critical elevation: no possible calculation from downstream", + "ERROR_REMOUS_PAS_CALCUL": "No possible calculation, neither from upstream nor from downstream", "ERROR_REMOUS_PENTE_FORTE": "The water line slope is too steep at abscissa %x% m (the discretisation step should be reduced)", "ERROR_SECTION_NON_CONVERGENCE_NEWTON_HCONJUG": "Non-convergence of the calculation of the combined depth (Newton's method)", "ERROR_SECTION_NON_CONVERGENCE_NEWTON_HCRITIQUE": "Non-convergence of the calculation of the critical depth (Newton's method)", @@ -58,10 +61,14 @@ "INFO_CALCULATOR_OPEN_HELP": "Help", "INFO_CALCULATOR_PARAMFIXES": "Fixed parameters", "INFO_CALCULATOR_RESULTS_GENERATE_PAB": "Generate a fish ladder", + "INFO_CALCULATOR_RESULTS_GENERATE_SP_AMONT": "Hydraulic details of upstream section", + "INFO_CALCULATOR_RESULTS_GENERATE_SP_AVAL": "Hydraulic details of downstream section", "INFO_CALCULATOR_RESULTS_TITLE": "Results", "INFO_CALCULATOR_SAVE": "Save", "INFO_CALCULATOR_USED_BY": "Used by", "INFO_CALCULATOR_VALEURS": "Values", + "INFO_BIEF_TITRE_COURT": "Reach", + "INFO_BIEF_TITRE": "Up/downstream elevations of a reach", "INFO_CLOISONS_TITRE_COURT": "Cross walls", "INFO_CLOISONS_TITRE": "Fish ladder: Cross walls", "INFO_CLOSE_DIALOGUE_DEPENDING_MODULES": "The following modules depend on the one you are closing:", diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json index f2199ec48ec6217d359dedb84a5a225299f8cd82..92a77bf9c5055217b2bc34703262cae2ab5fab84 100644 --- a/src/locale/messages.fr.json +++ b/src/locale/messages.fr.json @@ -5,6 +5,8 @@ "WARNING_NOTCH_SUBMERSION_GREATER_THAN_07": "La formule de l'échancrure n'est pas conseillée pour un ennoiement supérieur à 0.7", "WARNING_SLOT_SUBMERSION_NOT_BETWEEN_07_AND_09": "La formule de la fente n'est pas conseillée pour un ennoiement inférieur à 0.7 et supérieur à 0.9", "ERROR_ABSTRACT": "%nb% erreurs rencontrées lors du calcul", + "ERROR_BIEF_Z1_CALC_FAILED": "Impossible de calculer la cote amont (calcul interrompu avant l'amont)", + "ERROR_BIEF_Z2_CALC_FAILED": "Impossible de calculer la cote aval (calcul interrompu avant l'aval)", "ERROR_DICHO_CONVERGE": "La dichotomie n'a pas pu converger", "ERROR_DICHO_FUNCTION_VARIATION": "Dichotomie : impossible de determiner le sens de variation de la fonction", "ERROR_DICHO_INIT_DOMAIN": "Dichotomie : la valeur cible %targetSymbol%=%targetValue% n'existe pas pour la variable %variableSymbol% prise dans l'intervalle %variableInterval%", @@ -41,8 +43,9 @@ "ERROR_PARAMDOMAIN_INVALID": "Paramètre '%symbol%' : le domaine de définition '%domain%' est incorrect", "ERROR_PROBLEM_LOADING_SESSION": "Session chargée, avec des erreurs", "ERROR_REMOUS_NO_WATER_LINE": "Aucune ligne d'eau ne peut être calculée", - "ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT": "Condition limite amont > Hauteur critique : pas de calcul possible depuis l'amont", - "ERROR_REMOUS_PAS_CALCUL_DEPUIS_AVAL": "Condition limite aval < Hauteur critique : pas de calcul possible depuis l'aval", + "WARNING_REMOUS_PAS_CALCUL_DEPUIS_AMONT": "Condition limite amont > Hauteur critique : pas de calcul possible depuis l'amont", + "WARNING_REMOUS_PAS_CALCUL_DEPUIS_AVAL": "Condition limite aval < Hauteur critique : pas de calcul possible depuis l'aval", + "ERROR_REMOUS_PAS_CALCUL": "Aucun calcul possible ni depuis l'amont ni depuis l'aval", "ERROR_REMOUS_PENTE_FORTE": "La pente de la ligne d'eau est trop forte à l'abscisse %x% m (il faudrait réduire le pas de discrétisation)", "ERROR_SECTION_NON_CONVERGENCE_NEWTON_HCONJUG": "Non convergence du calcul de la hauteur conjuguée (Méthode de Newton)", "ERROR_SECTION_NON_CONVERGENCE_NEWTON_HCRITIQUE": "Non convergence du calcul de la hauteur critique (Méthode de Newton)", @@ -58,10 +61,14 @@ "INFO_CALCULATOR_OPEN_HELP": "Aide", "INFO_CALCULATOR_PARAMFIXES": "Paramètres fixés", "INFO_CALCULATOR_RESULTS_GENERATE_PAB": "Générer une passe à bassins", + "INFO_CALCULATOR_RESULTS_GENERATE_SP_AMONT": "Détails hydrauliques de la section amont", + "INFO_CALCULATOR_RESULTS_GENERATE_SP_AVAL": "Détails hydrauliques de la section aval", "INFO_CALCULATOR_RESULTS_TITLE": "Résultats", "INFO_CALCULATOR_SAVE": "Enregistrer", "INFO_CALCULATOR_USED_BY": "Utilisé par", "INFO_CALCULATOR_VALEURS": "Valeurs", + "INFO_BIEF_TITRE_COURT": "Bief", + "INFO_BIEF_TITRE": "Cotes amont/aval d'un bief", "INFO_CLOISONS_TITRE_COURT": "Cloisons", "INFO_CLOISONS_TITRE": "Passe à bassins : Cloisons", "INFO_CLOSE_DIALOGUE_DEPENDING_MODULES": "Les modules suivants dépendent de celui que vous êtes en train de fermer :",