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

courbes de remous : utilisation de la classe ParamValueIterator pour générer...

courbes de remous : utilisation de la classe ParamValueIterator pour générer les valeurs de x (valeur prises dans les paramètres Dx et Long)
Showing with 20 additions and 29 deletions
+20 -29
......@@ -9,6 +9,7 @@ import { cLog } from "./util/log";
import { Message, MessageCode } from "./util/message";
import { Result } from "./util/result";
import { ResultElement } from "./util/resultelement";
import { ParamValueIterator, ParamValues } from ".";
export enum MethodeResolution {
Trapezes, EulerExplicite, RungeKutta4
......@@ -111,11 +112,6 @@ export class CourbeRemous extends Nub {
private prmSect: ParamsSection;
/**
* Pas de discrétisation de l'espace (positif en partant de l'aval, négatif en partant de l'amont)
*/
private Dx: number;
constructor(crp: CourbeRemousParams, dbg: boolean = false) {
super(crp, dbg);
// this._log = crp.Sn.log;
......@@ -123,10 +119,17 @@ export class CourbeRemous extends Nub {
this.Sn.Calc("Yc");
}
/**
* Pas de discrétisation de l'espace (positif en partant de l'aval, négatif en partant de l'amont)
*/
private get Dx(): number {
return this.prms.Dx.v;
}
/**
* calcul de la ligne fluviale depuis l'aval (si possible)
*/
public calculFluvial(): ResultElement {
private calculFluvial(xValues: ParamValues): ResultElement {
if (!this.Sn.HautCritique.ok) {
return new ResultElement(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE));
}
......@@ -140,8 +143,7 @@ export class CourbeRemous extends Nub {
this.debug(
`Condition limite aval (${this.prms.Yaval.v}) >= ` +
`Hauteur critique (${this.Sn.HautCritique}) : calcul de la partie fluviale à partir de l'aval`);
this.Dx = this.prms.Dx.v;
res = this.calcul(this.prms.Yaval.v);
res = this.calcul(this.prms.Yaval.v, xValues.getValuesIterator(true));
res.insertMessage(new Message(MessageCode.INFO_REMOUS_CALCUL_FLUVIAL));
} else {
this.debug(
......@@ -159,7 +161,7 @@ export class CourbeRemous extends Nub {
/**
* calcul de la ligne torrentielle depuis l'amont (si possible)
*/
public calculTorrentiel(): ResultElement {
private calculTorrentiel(xValues: ParamValues): ResultElement {
if (!this.Sn.HautCritique.ok) {
return new ResultElement(new Message(MessageCode.WARNING_REMOUS_ARRET_CRITIQUE));
}
......@@ -174,8 +176,7 @@ export class CourbeRemous extends Nub {
"Condition limite amont (" + this.prms.Yamont.v +
") <= Hauteur critique (" + this.Sn.HautCritique +
") : calcul de la partie torrentielle à partir de l'amont");
this.Dx = -this.prms.Dx.v;
res = this.calcul(this.prms.Yamont.v);
res = this.calcul(this.prms.Yamont.v, xValues.getValuesIterator(false));
res.insertMessage(new Message(MessageCode.INFO_REMOUS_CALCUL_TORRENTIEL));
} else {
// this._log.add(new Message(MessageCode.ERROR_REMOUS_PAS_CALCUL_DEPUIS_AMONT));
......@@ -250,15 +251,17 @@ export class CourbeRemous extends Nub {
// Calcul des courbes de remous
const xValues = new ParamValues(0, this.prms.Long.v, this.Dx)
// let crbFlu: { [key: number]: number; } = this.calculFluvial();
const rCourbeFlu: ResultElement = this.calculFluvial();
const rCourbeFlu: ResultElement = this.calculFluvial(xValues);
// if (!rCourbeFlu.ok) {
res.addLog(rCourbeFlu.log);
// return res;
// }
// let crbTor: { [key: number]: number; } = this.calculTorrentiel();
const rCourbeTor: ResultElement = this.calculTorrentiel();
const rCourbeTor: ResultElement = this.calculTorrentiel(xValues);
// if (!rCourbeTor.ok) {
res.addLog(rCourbeTor.log);
// return res;
......@@ -358,7 +361,7 @@ export class CourbeRemous extends Nub {
// this.debug(trX);
let bRessaut = false;
const Dx = this.prms.Dx.v;
const Dx = xValues.step;
for (let irX = 0; irX < trX.length; irX++) {
const rX: number = +trX[irX];
......@@ -811,27 +814,15 @@ export class CourbeRemous extends Nub {
* Calcul d'une courbe de remous en fluvial ou torrentiel
* @param YCL Condition limite amont (torrentiel) ou aval (fluvial)
*/
private calcul(YCL: number): ResultElement {
private calcul(YCL: number, valueIterator: ParamValueIterator): ResultElement {
const trY: { [key: number]: number; } = {};
const res = new ResultElement();
let deb: number;
let fin: number;
if (this.Dx > 0) {
// Calcul depuis l'aval
deb = this.prms.Long.v;
fin = 0;
} else {
// Calcul depuis l'amont
deb = 0;
fin = this.prms.Long.v;
}
const dx = -this.Dx;
let lastY = YCL;
trY[round(deb, this.prmSect.iPrec.v)] = lastY;
trY[round(valueIterator.next().value, this.prmSect.iPrec.v)] = lastY;
// Boucle de calcul de la courbe de remous
for (let x = deb + dx; (dx > 0 && x <= fin) || (dx < 0 && x >= fin); x += dx) {
for (const x of valueIterator) {
// this.debug("lastY " + lastY);
const rY: Result = this.Calc_Y(lastY);
// this.debug("calcul : x " + x + " y " + rY.vCalc);
......
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