import { ParamValues } from "../internal_modules";
import { cLog } from "../internal_modules";
import { Result } from "../internal_modules";
import { MethodeResolution } from "../internal_modules";
import { CourbeRemousParams } from "../internal_modules";
import { SectionNub } from "../internal_modules";
import { acSection } from "../internal_modules";
export interface ITrYResult {
    trY: {
        [key: number]: number;
    };
    log: cLog;
}
/**
 * Calcul d'une courbe de remous
 */
export declare class CourbeRemous extends SectionNub {
    private static _availableTargets;
    private _debugDicho;
    private Dx;
    constructor(s: acSection, crp: CourbeRemousParams, method?: MethodeResolution, dbg?: boolean);
    get methodeResolution(): MethodeResolution;
    set methodeResolution(m: MethodeResolution);
    setSection(s: acSection): void;
    /**
     * This needs to be called before calculation if Z1, Z2, ZF1 or ZF2 was modified
     */
    setIfFromElevations(): void;
    static get availableTargets(): string[];
    /**
     * Prepare parameters for calculRemous
     */
    preCalc(): void;
    /**
     * @param valACal nom de la variable à calculer
     */
    calculRemous(valACal: string): Result;
    /**
     * Calcule un seul point de la courbe, uniquement pour le solveur de la méthode Trapezes
     * @WARNING scorie toute pourrie
     */
    Calc(sVarCalc: string, rInit?: number): Result;
    Equation(sVarCalc: string): Result;
    /**
     * Effectue une série de calculs sur un paramètre; déclenche le calcul en chaîne
     * des modules en amont si nécessaire
     * @param rInit solution approximative du paramètre
     * @param sDonnee éventuel symbole / paire symbole-uid du paramètre à calculer
     */
    CalcSerie(rInit?: number): Result;
    CalcHS(): number;
    get Sn(): acSection;
    get prms(): CourbeRemousParams;
    isComputable(): boolean;
    /**
     * Retourne la cote de fond à l'abscisse x
     * @param x abscisse en m (0 = amont)
     */
    getCoteFond(x: number): number;
    /**
     * calcul de la ligne fluviale depuis l'aval (si possible)
     */
    calculFluvial(xValues: ParamValues): ITrYResult;
    /**
     * calcul de la ligne torrentielle depuis l'amont (si possible)
     */
    calculTorrentiel(xValues: ParamValues): ITrYResult;
    protected setParametersCalculability(): void;
    protected adjustChildParameters(): void;
    /**
     * Calcul de dy/dx (utilisé par Euler explicite et Runge-Kutta 4)
     * @param Y Tirant d'eau initial
     */
    private Calc_dYdX;
    /**
     * Calcul du point suivant de la courbe de remous par la méthode Euler explicite.
     * @param Y Tirant d'eau initial
     * @return Tirant d'eau
     */
    private Calc_Y_EulerExplicite;
    /**
     * Calcul du point suivant de la courbe de remous par la méthode RK4.
     * @param Y Tirant d'eau initial
     * @return Tirant d'eau
     */
    private Calc_Y_RK4;
    /**
     * Calcul du point suivant de la courbe de remous par la méthode de l'intégration par trapèze
     * @param Y Tirant d'eau initial
     * @return Tirant d'eau
     */
    private Calc_Y_Trapez;
    /**
     * Calcul du point suivant d'une courbe de remous
     * @param Y Tirant d'eau initial
     * @return Tirant d'eau
     */
    protected Calc_Y(Y: number): Result;
    private size;
    private last;
    /**
     * Calcul d'une courbe de remous en fluvial ou torrentiel
     * @param YCL Condition limite amont (torrentiel) ou aval (fluvial)
     */
    private calcul;
    private logArray;
    private logObject;
}
//# sourceMappingURL=remous.d.ts.map