Skip to content
Snippets Groups Projects
Commit dd1d635e authored by mathias.chouet's avatar mathias.chouet
Browse files

Fix nghyd#336 - partial calculations on Grid

parent 10595afb
No related branches found
No related tags found
No related merge requests found
...@@ -106,17 +106,21 @@ export class Grille extends Nub implements Observer { ...@@ -106,17 +106,21 @@ export class Grille extends Nub implements Observer {
const t = this.gridType; const t = this.gridType;
// Préconisations d'inclinaison // Préconisations d'inclinaison
if (t === GrilleType.Oriented) { if (this.gridPlanParamsOK) {
if (this.prms.Alpha.v > 45) { if (t === GrilleType.Oriented) {
r.resultElement.addMessage(new Message(MessageCode.WARNING_GRILLE_ALPHA_GREATER_THAN_45)); if (this.prms.Alpha.v > 45) {
r.resultElement.addMessage(new Message(MessageCode.WARNING_GRILLE_ALPHA_GREATER_THAN_45));
}
} }
} if (t === GrilleType.Inclined) {
if (t === GrilleType.Inclined) { if (this.prms.Beta.v > 26) {
if (this.prms.Beta.v > 26) { r.resultElement.addMessage(new Message(MessageCode.WARNING_GRILLE_BETA_GREATER_THAN_26));
r.resultElement.addMessage(new Message(MessageCode.WARNING_GRILLE_BETA_GREATER_THAN_26)); }
} }
} }
// 1st calculation step
// Hauteur d'eau // Hauteur d'eau
const H = this.prms.CEau.v - this.prms.CRad.v; const H = this.prms.CEau.v - this.prms.CRad.v;
r.resultElement.values.H = H; r.resultElement.values.H = H;
...@@ -136,55 +140,61 @@ export class Grille extends Nub implements Observer { ...@@ -136,55 +140,61 @@ export class Grille extends Nub implements Observer {
const VAPDG = this.prms.QMax.v / SPDG; const VAPDG = this.prms.QMax.v / SPDG;
r.resultElement.values.VAPDG = VAPDG; r.resultElement.values.VAPDG = VAPDG;
// Rapport de forme des barreaux // 2nd calculation step
const RFB = this.prms.b.v / this.prms.p.v; if (this.gridPlanParamsOK) {
r.resultElement.values.RFB = RFB; let VN: number;
// Rapport espacement/épaisseur des barreaux
const REEB = this.prms.e.v / this.prms.b.v; if (t === GrilleType.Conventional || t === GrilleType.Inclined) {
r.resultElement.values.REEB = REEB; // Longueur de grille immergée
// Obstruction due aux barreaux seuls const LG = HG / Math.sin(this.prms.Beta.v * Math.PI / 180);
const OB = this.prms.b.v / (this.prms.b.v + this.prms.e.v); r.resultElement.values.LG = LG;
r.resultElement.values.OB = OB; // Distance longitudinale entre le point émergent du plan de grille et le pied de grille
const D = H / Math.tan(this.prms.Beta.v * Math.PI / 180);
let VN: number; r.resultElement.values.D = D;
// Distance longitudinale entre le sommet immergé et le pied de grille
if (t === GrilleType.Conventional || t === GrilleType.Inclined) { const DG = HG / Math.tan(this.prms.Beta.v * Math.PI / 180);
// Longueur de grille immergée r.resultElement.values.DG = DG;
const LG = HG / Math.sin(this.prms.Beta.v * Math.PI / 180); // Surface de grille immergée
r.resultElement.values.LG = LG; const SG = LG * this.prms.B.v;
// Distance longitudinale entre le point émergent du plan de grille et le pied de grille r.resultElement.values.SG = SG;
const D = H / Math.tan(this.prms.Beta.v * Math.PI / 180); // Vitesse normale moyenne pour le débit maximum turbiné
r.resultElement.values.D = D; VN = this.prms.QMax.v / SG;
// Distance longitudinale entre le sommet immergé et le pied de grille r.resultElement.values.VN = VN;
const DG = HG / Math.tan(this.prms.Beta.v * Math.PI / 180); }
r.resultElement.values.DG = DG;
// Surface de grille immergée
const SG = LG * this.prms.B.v;
r.resultElement.values.SG = SG;
// Vitesse normale moyenne pour le débit maximum turbiné
VN = this.prms.QMax.v / SG;
r.resultElement.values.VN = VN;
}
if (t === GrilleType.Oriented) { if (t === GrilleType.Oriented) {
// Largeur du plan de grille // Largeur du plan de grille
const BG = this.prms.B.v / Math.sin(this.prms.Alpha.v * Math.PI / 180); const BG = this.prms.B.v / Math.sin(this.prms.Alpha.v * Math.PI / 180);
// ... BG is not exposed as a result ! // ... BG is not exposed as a result !
// Surface de grille immergée // Surface de grille immergée
const SG = BG * HG; const SG = BG * HG;
r.resultElement.values.SG = SG; r.resultElement.values.SG = SG;
// Vitesse normale moyenne pour le débit maximum turbiné // Vitesse normale moyenne pour le débit maximum turbiné
VN = this.prms.QMax.v / SG; VN = this.prms.QMax.v / SG;
r.resultElement.values.VN = VN; r.resultElement.values.VN = VN;
} }
// Préconisation pour éviter le placage des poissons sur le plan de grille // Préconisation pour éviter le placage des poissons sur le plan de grille
if (VN > 0.5) { if (VN > 0.5) {
r.resultElement.addMessage(new Message(MessageCode.WARNING_GRILLE_VN_GREATER_THAN_05)); r.resultElement.addMessage(new Message(MessageCode.WARNING_GRILLE_VN_GREATER_THAN_05));
}
} }
// perte de charge // 3rd calculation step
this.calcDH(r, VAPDG); if (this.gridPlanParamsOK && this.gridParamsOK) {
// Rapport de forme des barreaux
const RFB = this.prms.b.v / this.prms.p.v;
r.resultElement.values.RFB = RFB;
// Rapport espacement/épaisseur des barreaux
const REEB = this.prms.e.v / this.prms.b.v;
r.resultElement.values.REEB = REEB;
// Obstruction due aux barreaux seuls
const OB = this.prms.b.v / (this.prms.b.v + this.prms.e.v);
r.resultElement.values.OB = OB;
// perte de charge
this.calcDH(r, VAPDG);
}
return r; return r;
} }
...@@ -280,6 +290,47 @@ export class Grille extends Nub implements Observer { ...@@ -280,6 +290,47 @@ export class Grille extends Nub implements Observer {
return this.Calc(); return this.Calc();
} }
/**
* Returns true if every "grid plan" parameter (2nd fieldset in NgHyd)
* has a defined value; allows to perform 2nd calculation step
*/
private get gridPlanParamsOK(): boolean {
if (this.gridType === GrilleType.Oriented) {
return this.prms.Alpha.singleValue !== undefined;
} else {
return this.prms.Beta.singleValue !== undefined;
}
}
/**
* Returns true if every "grid" parameter (3rd fieldset in NgHyd)
* has a defined value; allows to perform 3rd calculation step
*/
private get gridParamsOK(): boolean {
let optionalFieldsOk: boolean = true;
if (this.gridProfile === GrilleProfile.Custom) {
optionalFieldsOk = optionalFieldsOk && (this.prms.a.singleValue !== undefined);
if (this.gridType === GrilleType.Oriented) {
optionalFieldsOk = optionalFieldsOk && (this.prms.c.singleValue !== undefined);
}
}
if (this.gridType === GrilleType.Inclined) {
optionalFieldsOk = (
optionalFieldsOk
&& (this.prms.OEntH.singleValue !== undefined)
&& (this.prms.cIncl.singleValue !== undefined)
);
}
return (
optionalFieldsOk
// mandatory fields
&& this.prms.b.singleValue !== undefined
&& this.prms.p.singleValue !== undefined
&& this.prms.e.singleValue !== undefined
&& this.prms.O.singleValue !== undefined
);
}
/** /**
* Perte de charge pour un taux de colmatage allant de 0 à 60% par pas de 5%. * Perte de charge pour un taux de colmatage allant de 0 à 60% par pas de 5%.
* @param r Result to complete with calculated DH values * @param r Result to complete with calculated DH values
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment