From 505ec5597dc77daf457124c78a3a655c850e8776 Mon Sep 17 00:00:00 2001 From: David Dorchies <david.dorchies@irstea.fr> Date: Mon, 13 May 2019 15:20:44 +0200 Subject: [PATCH] #33 PAB: Break dependencies between param mode of cloison model and pabCloisons --- src/pab/pab.ts | 9 +++++++++ src/pab/pab_cloisons.ts | 43 +++++++++++++++++++++++------------------ 2 files changed, 33 insertions(+), 19 deletions(-) diff --git a/src/pab/pab.ts b/src/pab/pab.ts index f56c5311..c94d9826 100644 --- a/src/pab/pab.ts +++ b/src/pab/pab.ts @@ -36,8 +36,17 @@ export class Pab extends Nub { return this._children as PabCloisons[]; } + public Calc(sVarCalc?: string, rInit?: number): Result { + // Update array of PabCloisons with last Models current values + for (const cl of this.children) { + cl.prms.setCurrentValuesFromModel(); + } + return super.Calc(sVarCalc, rInit); + } + /** * Calcul analytique + * @warning Should be called by this.Calc only for parameter initialisations * @param sVarCalc Variable à calculer (Z1 uniquement) */ public Equation(sVarCalc: string): Result { diff --git a/src/pab/pab_cloisons.ts b/src/pab/pab_cloisons.ts index d37d473e..2e675cd0 100644 --- a/src/pab/pab_cloisons.ts +++ b/src/pab/pab_cloisons.ts @@ -7,8 +7,11 @@ import { Pab } from "./pab"; class PabCloisonsParams extends CloisonsParams { - /** Débit d'attrait d'un bassin (m3/s) */ - public _QA: ParamDefinition; + /** Débit d'attrait d'un bassin (m3/s) */ + public _QA: ParamDefinition; + + /** Model of cloison on which this pabCloison is based */ + private _modelCloisonsParams: CloisonsParams; /** * Paramètres communs à toutes les équations de structure @@ -21,10 +24,7 @@ class PabCloisonsParams extends CloisonsParams { */ constructor(modelCloisonsParams?: CloisonsParams, rQA: number = 0) { super(1, 1, 1, 1, 1, 1); // overwritten by init() below - this.init(modelCloisonsParams); - - // On garde Pr en propre sur cet objet (Pointage impossible car en lecture seule) - this.addParamDefinition(this.Pr, true); + this.modelCloisonsParams = modelCloisonsParams; // Débit d'attrait this._QA = new ParamDefinition(this, "QA", ParamDomainValue.POS_NULL, rQA, ParamFamily.FLOWS); @@ -35,17 +35,22 @@ class PabCloisonsParams extends CloisonsParams { return this._QA; } - public init(modelCloisonsParams: CloisonsParams) { - // might be undefined when created by a Session - if (modelCloisonsParams) { - this.Q = modelCloisonsParams.Q; - this.Z1 = modelCloisonsParams.Z1; - this.LB = modelCloisonsParams.LB; - this.BB = modelCloisonsParams.BB; - this.PB = modelCloisonsParams.PB; - this.DH = modelCloisonsParams.DH; - // Force la MAJ de la map avec les propriétés pointant vers celles de CloisonsParam - this.addParamDefinitions(modelCloisonsParams); + /** + * Record pointer to the cloison model for future updating of local parameters + */ + set modelCloisonsParams(modelCloisonsParams: CloisonsParams) { + this._modelCloisonsParams = modelCloisonsParams; + } + + /** + * Update Current values and sandobx values of parameter from cloison model + */ + public setCurrentValuesFromModel() { + if (this._modelCloisonsParams !== undefined) { + for (const p of this._modelCloisonsParams) { + this._paramMap[p.symbol].currentValue = p.currentValue; + this._paramMap[p.symbol].v = p.currentValue; + } } } @@ -89,10 +94,10 @@ export class PabCloisons extends Cloisons { } /** - * Sets modelCloisons as the current model, initializing the parameters with it + * Sets modelCloisons as the current model (set pointers to parameters and structure array) */ public initModelCloisons(modelCloisons: Cloisons) { - this.prms.init(modelCloisons ? modelCloisons.prms : undefined); + this.prms.modelCloisonsParams = modelCloisons ? modelCloisons.prms : undefined; this._children = modelCloisons ? modelCloisons.structures : []; } -- GitLab