diff --git a/README.md b/README.md index b990318dfbe4862995b1e5793b9d078457be62d1..03fd8828bed67cf39e38dbf7bd6c1c63577935e5 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 312fc0f57da881136a66a682cb5691c0d3639386..91771cd8e17a005bf0f26760cfe741cc093f3cb6 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 0000000000000000000000000000000000000000..378584f6555118141485a2f2fa56876154c538ab --- /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 0000000000000000000000000000000000000000..b771da5462f5fe203138e6a3d6480d207e757855 --- /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 0000000000000000000000000000000000000000..fb5d64a4a4bc0068b036e6471e37435ab44d06d3 --- /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 912d49becbff31a6064a09b4ed8cdeebbde3ceae..509b10a1cca46798f73746670865e3c1fb6a5068 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 280abe71626654f585d299267537c5c19814442d..d9ba762edc2f1d23584bac7742fe58ed0fc5b00a 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 998b75a7149cf4e663bf1e7c50591624054face3..2db893c26360d1c2a8cf5ac0656f21071ac0a2c1 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 0195eb2044e57571daae3796e62a087fcd2ae732..6bc3746c9b23721211deb35ef32bcc4e025be6a7 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 a2e3aa375b0bb38babf97137a3870d157e7dbd68..a56076a61b4902525e01c3c5f374ac83cece20e3 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 c3cb915607aa822981af0362653cb359d2bcf717..b6c4c68f612f5ec982d69697de307ee0a98d4932 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 d3e14d84614e4cc6a7ea95e9c338713136207fb4..cc78a2a513b54fd2e5f5c684965c22758f109366 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