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