Commit fa4e9c8d authored by Grand Francois's avatar Grand Francois
Browse files

section_circulaire.ts : ajout isDebordement(), valeurDebordement()

Showing with 87 additions and 28 deletions
+87 -28
......@@ -13,34 +13,82 @@ export class cSnCirc extends acSection {
constructor(oLog: cLog, oP: cParamsCanal, D: number, dbg: boolean = false) {
super(oLog, oP, dbg);
this.v.D = D;
if (oP.v.YB > D) { oP.v.YB = D; } // On place la berge au sommet du cercle
// commenté car si D est la variable à déterminer, il peut valoir n'importe quoi... if (oP.v.YB > D) { oP.v.YB = D; } // On place la berge au sommet du cercle
}
/**
* valeur du débordement
* Le tirant d'eau est soustrait soit à la côte de berge, soit au diamètre
* au cas où le canal soit "enterré" (côte de berge > diamètre)
*/
private valeurYDebordement(): number {
// this.debug('deb');
// this.debug('YB ' + this.v.YB);
// this.debug('D ' + this.v.D);
// this.debug('min ' + Math.min(this.v.YB, this.v.D));
// this.debug('Y ' + this.v.Y);
// let min = Math.min(this.v.YB, this.v.D);
// this.debug('min( YB(=' + this.v.YB + '), D(=' + this.v.D + ')) = ' + min);
// this.debug('max(0, Y(=' + this.v.Y + ') - min(YB, D)(=' + min + ') = ' + Math.max(0, this.v.Y - Math.min(this.v.YB, this.v.D)));
// return Math.max(0, this.v.Y - Math.min(this.v.YB, this.v.D));
return this.v.Y - Math.min(this.v.YB, this.v.D); // >= 0 par définition, et toujours vrai car utilisé après test isDebordement()
// if (this.isDebordement())
// return this.v.Y - this.v.YB;
// return 0;
}
/**
* teste le débordement.
* @returns true en cas de débordement
*/
private isDebordement(): boolean {
// return this.v.Y > Math.min(this.v.YB, this.v.D);
//return this.valeurYDebordement() > 0;
return this.v.Y >= this.v.D || this.v.Y >= this.v.YB
}
/**
* Calcul de l'angle Alpha de la surface libre par rapport au fond.
* @return Alpha
*/
// Calc_Alpha() {
// if (this.v.Y > this.oP.v.YB) {
// // var rY = this.oP.v.YB;
// var rY = this.v.YB;
// }
// else {
// rY = this.v.Y;
// }
// if (rY <= 0) {
// return 0;
// }
// else if (rY > this.v.D) {
// return Math.PI;
// }
// else {
// var alpha = Math.acos(1. - rY / (this.v.D / 2.));
// if (alpha > Math.PI) {
// return Math.PI;
// }
// else {
// return alpha;
// }
// }
// }
Calc_Alpha() {
if (this.v.Y > this.oP.v.YB) {
var rY = this.oP.v.YB;
}
else {
rY = this.v.Y;
}
if (rY <= 0) {
if (this.v.Y <= 0)
return 0;
}
else if (rY > this.v.D) {
if (this.isDebordement())
return Math.PI;
}
else {
var alpha = Math.acos(1. - rY / (this.v.D / 2.));
if (alpha > Math.PI) {
return Math.PI;
}
else {
return alpha;
}
}
let alpha = Math.acos(1. - this.v.Y / (this.v.D / 2.));
if (alpha > Math.PI)
return Math.PI;
return alpha;
}
/**
......@@ -48,7 +96,8 @@ export class cSnCirc extends acSection {
* @return dAlpha
*/
Calc_dAlpha() {
if (this.v.Y <= 0 || this.v.Y >= this.v.D || this.v.Y > this.oP.v.YB) {
// if (this.v.Y <= 0 || this.v.Y >= this.v.D || this.v.Y > this.oP.v.YB) {
if (this.v.Y <= 0 || this.isDebordement()) {
return 0;
}
else {
......@@ -61,7 +110,8 @@ export class cSnCirc extends acSection {
* @return B
*/
Calc_B() {
if (this.v.Y > this.oP.v.YB) {
// if (this.v.Y > this.oP.v.YB) {
if (this.isDebordement()) {
return super.Calc_B_Debordement();
}
else {
......@@ -75,9 +125,11 @@ export class cSnCirc extends acSection {
* @return B
*/
Calc_P(rY = 0) {
if (this.v.Y > this.oP.v.YB && !this.bSnFermee) {
// if (this.v.Y > this.oP.v.YB && !this.bSnFermee) {
if (this.isDebordement() && !this.bSnFermee) {
// On n'ajoute pas le périmètre dans le cas d'une fente de Preissmann
return this.CalcGeo('P') + super.Calc_P_Debordement(this.v.Y - this.oP.v.YB);
// return this.CalcGeo('P') + super.Calc_P_Debordement(this.v.Y - this.oP.v.YB);
return this.CalcGeo('P') + super.Calc_P_Debordement(this.valeurYDebordement());
}
else {
return this.v.D * this.Calc('Alpha');
......@@ -90,8 +142,10 @@ export class cSnCirc extends acSection {
* @return S
*/
Calc_S(rY = 0) {
if (this.v.Y > this.oP.v.YB) {
return this.CalcGeo('S') + super.Calc_S_Debordement(this.v.Y - this.oP.v.YB);
// if (this.v.Y > this.oP.v.YB) {
if (this.isDebordement() && !this.bSnFermee) {
// return this.CalcGeo('S') + super.Calc_S_Debordement(this.v.Y - this.oP.v.YB);
return this.CalcGeo('S') + super.Calc_S_Debordement(this.valeurYDebordement());
}
else {
return Math.pow(this.v.D, 2) / 4 * (this.Calc('Alpha') - Math.sin(this.Calc('Alpha')) * Math.cos(this.Calc('Alpha')));
......@@ -104,25 +158,29 @@ export class cSnCirc extends acSection {
* @return dP
*/
Calc_dP() {
if (this.v.Y > this.oP.v.YB && !this.bSnFermee) {
// if (this.v.Y > this.oP.v.YB && !this.bSnFermee) {
if (this.isDebordement() && !this.bSnFermee) {
return super.Calc_dP_Debordement();
}
else {
return this.v.D * this.Calc('dAlpha');
}
}
/**
* Calcul de dérivée de la largeur au miroir par rapport au tirant d'eau.
* @return dB
*/
Calc_dB() {
if (this.v.Y > this.oP.v.YB) {
// if (this.v.Y > this.oP.v.YB) {
if (this.isDebordement()) {
return super.Calc_dB_Debordement();
}
else {
return this.v.D * this.Calc('dAlpha') * Math.cos(this.Calc('Alpha'));
}
}
/**
* Calcul de la distance du centre de gravité de la section à la surface libre
* multiplié par la surface hydraulique
......@@ -134,6 +192,7 @@ export class cSnCirc extends acSection {
SYg = Math.pow(this.v.D, 3) / 8 * SYg;
return SYg;
}
/**
* Calcul de la dérivée de la distance du centre de gravité de la section à la surface libre
* multiplié par la surface hydraulique
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment