From e0f90f0304fc40daaee4ccf6c440789d64b2d328 Mon Sep 17 00:00:00 2001 From: "francois.grand" <francois.grand@irstea.fr> Date: Thu, 11 Jan 2018 09:00:10 +0100 Subject: [PATCH] =?UTF-8?q?Ajout=20de=20la=20calculette=20"passe=20=C3=A0?= =?UTF-8?q?=20bassin=20:=20puissance=20dissip=C3=A9e"=20-=20correction=20d?= =?UTF-8?q?'un=20bug=20lors=20du=20calcul=20d'un=20param=C3=A8tre=20:=20la?= =?UTF-8?q?=20valeur=20initiale=20ne=20tenait=20pas=20compte=20du=20domain?= =?UTF-8?q?e=20de=20d=C3=A9finition=20du=20param=C3=A8tre=20-=20correction?= =?UTF-8?q?=20d'un=20bug=20lors=20de=20la=20modification=20"fix=C3=A9/?= =?UTF-8?q?=C3=A0=20varier/=C3=A0=20calculer"=20-=20modification=20de=20la?= =?UTF-8?q?=20proc=C3=A9dure=20d'ajout=20d'une=20calculette?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 18 +++---- .../generic/calculator.component.ts | 3 ++ .../pab-puissance/pab-puissance.config.json | 47 ++++++++++++++++ .../pab-puissance/pab-puissance.en.json | 9 ++++ .../pab-puissance/pab-puissance.fr.json | 9 ++++ .../calculator-list.component.ts | 1 + src/app/formulaire/formulaire-definition.ts | 53 ++++++++++++++++--- src/app/formulaire/ngparam.ts | 6 ++- .../services/formulaire/formulaire.service.ts | 3 ++ src/app/services/param/param.service.ts | 5 ++ src/locale/error_messages.en.json | 3 +- src/locale/error_messages.fr.json | 3 +- 12 files changed, 140 insertions(+), 20 deletions(-) create mode 100644 src/app/calculators/pab-puissance/pab-puissance.config.json create mode 100644 src/app/calculators/pab-puissance/pab-puissance.en.json create mode 100644 src/app/calculators/pab-puissance/pab-puissance.fr.json diff --git a/README.md b/README.md index b990318df..03fd8828b 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ and then : `npm run lint` -# Procédure d'ajout d'une calculette # +#Procédure d'ajout d'une calculette ##JaLHyd @@ -139,7 +139,6 @@ and then : ##ngHyd - * Créer les fichier de configuration de la calculette - dans _src/app/calculators_ : créer un répertoire (par ex _ma-calculette_) @@ -160,7 +159,13 @@ and then : On ne reprend pas directement l'enum _ComputeNodeType_ car celui ci sert à distinguer les variantes au sein d'une même calculette (par exemple les différentes sections paramétrées). -* Composant CalculatorListComponent : ajouter une ligne au constructeur pour créer une nouvelle entrée dans la liste des calculettes disponibles. +* Composant CalculatorListComponent : ajouter une ligne à la methode _updateLocale()_ pour créer une nouvelle entrée dans la liste des calculettes disponibles. + +* _src/locale/error_messages.<langue>.json_ : + Ajouter un champ pour le titre de la calculette. Par exemple : + _"INFO_MACALC_TITRE": "Ma calculette"_ + +* Compléter la méthode _GenericCalculatorComponent .uitextTitre()_ avec cette valeur et la valeur de l'enum _CalculatorType_ correspondante. * Classe _FormulaireService_, méthode _getConfigPathPrefix()_ : compléter le _switch_ pour fournir le préfixe des fichiers de configuration/internationalisation. @@ -170,10 +175,5 @@ and then : - _FormulaireDefinition.getComputeNodeTypeFromSection()_. - _ParamService.hasParameter()_ -* _src/locale/error_messages.<langue>.json_ : - Ajouter un champ pour le titre de la calculette. Par exemple : - _"INFO_MACALC_TITRE": "Ma calculette"_ - Compléter la méthode _GenericCalculatorComponent .uitextTitre()_ avec cette valeur et la valeur de l'enum _CalculatorType_ correspondante. - * Classe FormulaireDefinition : compléter la méthode _doCompute()_. - En particulier, adapter les méthodes _getNubAndParameters()_ ou _getSectionNubAndParameters()_ (récupération des valeurs saisies dans l'interface). \ No newline at end of file + En particulier, adapter les méthodes _getNubAndParameters()_ ou _getSectionNubAndParameters()_ (récupération des valeurs saisies dans l'interface). diff --git a/src/app/calculators/generic/calculator.component.ts b/src/app/calculators/generic/calculator.component.ts index 312fc0f57..91771cd8e 100644 --- a/src/app/calculators/generic/calculator.component.ts +++ b/src/app/calculators/generic/calculator.component.ts @@ -71,6 +71,9 @@ export class GenericCalculatorComponent implements OnInit, DoCheck, OnDestroy, O case CalculatorType.PabDimensions: return this.intlService.localizeText("INFO_PABDIM_TITRE") + case CalculatorType.PabPuissance: + return this.intlService.localizeText("INFO_PABPUISS_TITRE") + default: return "Invalid calculator type " + this._formulaire.calculatorType; } diff --git a/src/app/calculators/pab-puissance/pab-puissance.config.json b/src/app/calculators/pab-puissance/pab-puissance.config.json new file mode 100644 index 000000000..378584f65 --- /dev/null +++ b/src/app/calculators/pab-puissance/pab-puissance.config.json @@ -0,0 +1,47 @@ +[ + { + "id": "fs_puissance", + "option": "cal", + "fields": [ + { + "type": "input", + "id": "DH", + "unit": "m", + "value": 0.3 + }, + { + "type": "input", + "id": "Q", + "unit": "m³/s", + "value": 0.1 + }, + { + "type": "input", + "id": "V", + "unit": "m³", + "value": 0.5 + }, + { + "type": "input", + "id": "Pv", + "unit": "W", + "value": 588.6 + } + ] + }, + { + "id": "fs_param_calc", + "option": "fix", + "fields": [ + { + "type": "input", + "id": "Pr" + } + ] + }, + { + "id": "options", + "idCal": "Pv", + "nodeType": "PabPuissance" + } +] \ No newline at end of file diff --git a/src/app/calculators/pab-puissance/pab-puissance.en.json b/src/app/calculators/pab-puissance/pab-puissance.en.json new file mode 100644 index 000000000..b771da546 --- /dev/null +++ b/src/app/calculators/pab-puissance/pab-puissance.en.json @@ -0,0 +1,9 @@ +{ + "fs_puissance": "Basin dimensions", + "DH": "Drop", + "Q": "Discharge", + "V": "Volume", + "Pv": "Dissipated power", + "fs_param_calc": "Calculation parameters", + "Pr": "Display accuracy" +} \ 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 new file mode 100644 index 000000000..fb5d64a4a --- /dev/null +++ b/src/app/calculators/pab-puissance/pab-puissance.fr.json @@ -0,0 +1,9 @@ +{ + "fs_puissance": "Paramètres", + "DH": "Chute entre bassins", + "Q": "Débit", + "V": "Volume", + "Pv": "Puissance dissipée", + "fs_param_calc": "Paramètres de calcul", + "Pr": "Précision de calcul" +} \ No newline at end of file diff --git a/src/app/components/calculator-list/calculator-list.component.ts b/src/app/components/calculator-list/calculator-list.component.ts index 912d49bec..509b10a1c 100644 --- a/src/app/components/calculator-list/calculator-list.component.ts +++ b/src/app/components/calculator-list/calculator-list.component.ts @@ -37,6 +37,7 @@ export class CalculatorListComponent implements OnInit { this._items.push(new ListElement(this.intlService.localizeText("INFO_SECTPARAM_TITRE"), CalculatorType.SectionParametree)); this._items.push(new ListElement(this.intlService.localizeText("INFO_REMOUS_TITRE"), CalculatorType.CourbeRemous)); this._items.push(new ListElement(this.intlService.localizeText("INFO_PABDIM_TITRE"), CalculatorType.PabDimensions)); + this._items.push(new ListElement(this.intlService.localizeText("INFO_PABPUISS_TITRE"), CalculatorType.PabPuissance)); } private create(t: CalculatorType) { diff --git a/src/app/formulaire/formulaire-definition.ts b/src/app/formulaire/formulaire-definition.ts index 280abe716..d9ba762ed 100644 --- a/src/app/formulaire/formulaire-definition.ts +++ b/src/app/formulaire/formulaire-definition.ts @@ -1,7 +1,7 @@ -import { ComputeNodeType, ParamsEquation, Nub, acSection, RegimeUniforme, MethodeResolution, CourbeRemousParams, CourbeRemous } from "jalhyd"; +import { ComputeNodeType, ParamsEquation, Nub, acSection, RegimeUniforme, MethodeResolution, CourbeRemousParams, CourbeRemous, ParamDomainValue } from "jalhyd"; import { ParamsSectionRectang, cSnRectang, ParamsSectionCirc, cSnCirc, ParamsSectionPuiss, cSnPuiss, Result } from "jalhyd"; import { ConduiteDistrib, ConduiteDistribParams, LechaptCalmon, LechaptCalmonParams, ParamsSectionTrapez, cSnTrapez } from "jalhyd"; -import { PabDimension, PabDimensionParams } from "jalhyd"; +import { PabDimension, PabDimensionParams, PabPuissance, PabPuissanceParams } from "jalhyd"; import { ParamService } from "../services/param/param.service"; import { InternationalisationService } from "../services/internationalisation/internationalisation.service"; @@ -28,6 +28,7 @@ import { StringMap } from "../stringmap"; export enum CalculatorType { ConduiteDistributrice, LechaptCalmon, SectionParametree, RegimeUniforme, CourbeRemous, PabDimensions, // passe à bassin rectangulaire + PabPuissance, // passe à bassin : puissance dissipée } @@ -332,11 +333,13 @@ export class FormulaireDefinition { for (let fs of this._fieldSets) { for (let p of fs.fields) { if (p instanceof NgParameter) - if (p.radioState == ParamRadioConfig.FIX && p != sourceParam) { + if (p.radioConfig == ParamRadioConfig.CAL && p.radioState == ParamRadioConfig.FIX && p != sourceParam) { newCal = p; break; } } + if (newCal != undefined) + break; } newCal.radioState = ParamRadioConfig.CAL; @@ -961,6 +964,17 @@ export class FormulaireDefinition { return [nub, prms]; } + case CalculatorType.PabPuissance: + { + let DH: number = this.getParameterValue("DH"); // Chute entre bassins + let Q: number = this.getParameterValue("Q"); // Débit + let V: number = this.getParameterValue("V"); // volume V + let Pv: number = this.getParameterValue("Pv"); // puissance dissipée + let prms = new PabPuissanceParams(DH, Q, V, Pv); + let nub = new PabPuissance(prms); // pour initialiser la calculabilité des paramètres + return [nub, prms]; + } + default: throw "FormulaireService.getNubAndParameters() : valeur de CalculatorType " + this.calculatorType + " non implémentée" } @@ -1034,6 +1048,32 @@ export class FormulaireDefinition { } } + /** + * lance le calcul d'un paramètre en déterminant une valeur initiale + */ + private runNubCalc(nub: Nub, p: NgParameter, prec: number): Result { + let init: number; + switch (p.domain.domain) { + case ParamDomainValue.ANY: + case ParamDomainValue.POS_NULL: + init = 0; + break; + + case ParamDomainValue.INTERVAL: + init = p.domain.minValue; + break; + + case ParamDomainValue.NOT_NULL: + case ParamDomainValue.POS: + init = 1e-8; + break; + } + if (prec == undefined) + return nub.Calc(p.symbol, init); + + return nub.Calc(p.symbol, init, prec); + } + private doComputeFixedVar() { let np: [Nub, ParamsEquation]; let nub: Nub; @@ -1059,10 +1099,7 @@ export class FormulaireDefinition { if (varParam == undefined) { // pas de paramètre à varier - if (computePrec == undefined) - var res: Result = nub.Calc(computedParam.symbol, 0); - else - res = nub.Calc(computedParam.symbol, 0, computePrec); + let res: Result = this.runNubCalc(nub, computedParam, computePrec); if (res.ok) { this.addFixedResults(!rg); this._fixVarResults.addFixedResult(computedParam, res.vCalc, !rg); @@ -1085,7 +1122,7 @@ export class FormulaireDefinition { for (let val = min; val <= max; val += step) { prms[varParam.symbol].v = val; - let res = nub.Calc(computedParam.symbol, 0, computePrec); + let res: Result = this.runNubCalc(nub, computedParam, computePrec); if (res.ok) { this._fixVarResults.addVarResult(val, res.vCalc); } diff --git a/src/app/formulaire/ngparam.ts b/src/app/formulaire/ngparam.ts index 998b75a71..2db893c26 100644 --- a/src/app/formulaire/ngparam.ts +++ b/src/app/formulaire/ngparam.ts @@ -1,4 +1,4 @@ -import { ParamDefinition, ParamDomainValue, Interval } from "jalhyd"; +import { ParamDefinition, ParamDomainValue, Interval, ParamDomain } from "jalhyd"; import { InputField } from "./input-field"; import { Dependency } from "./dependency"; @@ -70,6 +70,10 @@ export class NgParameter extends InputField { return this._paramDef.symbol; } + get domain(): ParamDomain { + return this._paramDef.getDomain(); + } + // get alias(): string { // return this._paramDef.symbolAlias; // } diff --git a/src/app/services/formulaire/formulaire.service.ts b/src/app/services/formulaire/formulaire.service.ts index 0195eb204..6bc3746c9 100644 --- a/src/app/services/formulaire/formulaire.service.ts +++ b/src/app/services/formulaire/formulaire.service.ts @@ -177,6 +177,9 @@ export class FormulaireService extends Observable { case CalculatorType.PabDimensions: return "app/calculators/pab-dimensions/pab-dimensions."; + case CalculatorType.PabPuissance: + return "app/calculators/pab-puissance/pab-puissance."; + default: throw "FormulaireService.getConfigPathPrefix() : valeur de CalculatorType " + ct + " non implémentée" } diff --git a/src/app/services/param/param.service.ts b/src/app/services/param/param.service.ts index a2e3aa375..a56076a61 100644 --- a/src/app/services/param/param.service.ts +++ b/src/app/services/param/param.service.ts @@ -24,6 +24,7 @@ export class ParamService { this.addParameters(ComputeNodeType.CourbeRemousRectangle); this.addParameters(ComputeNodeType.CourbeRemousTrapeze); this.addParameters(ComputeNodeType.PabDimensions); + this.addParameters(ComputeNodeType.PabPuissance); // précision de calcul @@ -48,6 +49,10 @@ export class ParamService { p.calculability = ParamCalculability.FREE; this.addParameter(p); + p = new ParamDefinition(ComputeNodeType.PabPuissance, 'Pr', d); + p.calculability = ParamCalculability.FREE; + this.addParameter(p); + // logObject(this._params); } diff --git a/src/locale/error_messages.en.json b/src/locale/error_messages.en.json index c3cb91560..b6c4c68f6 100644 --- a/src/locale/error_messages.en.json +++ b/src/locale/error_messages.en.json @@ -76,5 +76,6 @@ "INFO_CLOSE_DIALOGUE_TEXT": "Warning ! Parameters and results will be lost. Really close ?", "INFO_OPTION_YES": "Yes", "INFO_OPTION_NO": "No", - "INFO_PABDIM_TITRE": "Passe à bassin : dimensions" + "INFO_PABDIM_TITRE": "Passe à bassin : dimensions", + "INFO_PABPUISS_TITRE": "Passe à bassin : dissipated power" } \ No newline at end of file diff --git a/src/locale/error_messages.fr.json b/src/locale/error_messages.fr.json index d3e14d846..cc78a2a51 100644 --- a/src/locale/error_messages.fr.json +++ b/src/locale/error_messages.fr.json @@ -82,5 +82,6 @@ "INFO_CLOSE_DIALOGUE_TEXT": "Attention ! Les paramètres et résultats de la calculette seront perdus. Vraiment fermer ?", "INFO_OPTION_YES": "Oui", "INFO_OPTION_NO": "Non", - "INFO_PABDIM_TITRE": "Passe à bassin : dimensions" + "INFO_PABDIM_TITRE": "Passe à bassin : dimensions", + "INFO_PABPUISS_TITRE": "Passe à bassin : puissance dissipée" } \ No newline at end of file -- GitLab