import { ChildNub } from "../internal_modules";
import { ParamDefinition } from "../internal_modules";
import { Result } from "../internal_modules";
import { StructureParams } from "../internal_modules";
import { LoiDebit } from "../internal_modules";
import { Nub } from "../internal_modules";
/**
 * Flow mode: weir or orifice flow
 */
export declare enum StructureFlowMode {
    /** Weir flow */
    WEIR = 0,
    /** Orifice flow */
    ORIFICE = 1,
    /** Zéro flow */
    NULL = 2
}
/**
 * Flow regime: free flow, partially submerged or submerged
 */
export declare enum StructureFlowRegime {
    /** Free flow (unsubmerged) */
    FREE = 0,
    /** Partially submerged flow */
    PARTIAL = 1,
    /** Submerged flow */
    SUBMERGED = 2,
    /** Zéro flow */
    NULL = 3
}
/** Type de jet : Sans objet (orifice), plongeant, de surface */
export declare enum StructureJetType {
    /** Plongeant */
    PLONGEANT = 0,
    /** De surface */
    SURFACE = 1,
    /** Sans objet (orifice) */
    SO = 2
}
/**
 * classe de calcul sur la conduite distributrice
 */
export declare abstract class Structure extends ChildNub {
    /**
     * Test générique si VarCalc="Q" pour l'utilisation de Equation
     */
    static CheckEquation(sVarCalc: string): void;
    /**
     * calcul du pourcentage d'ennoiement arrondi à l'unité
     */
    computeSubmergencePercentage(H2?: number): number;
    /**
     * calcul du pourcentage d'ennoiement arrondi à l'unité (version statique)
     */
    static computeSubmergencePercentage(h1: number, h2: number): number;
    /**
     * méthode générique de vérification que l'ennoiement est supérieur à une valeur donnée
     * @param min valeur minimum de l'ennoiement
     */
    protected checkSubmergenceMin(res: Result, min: number): void;
    /**
     * fonction appelée dans Calc() pour vérifier l'ennoiement (cf. classes dérivées)
     */
    checkSubmergence(res: Result): void;
    static filterResultsOnSubmergenceError(res: Result): boolean;
    /** Constante utile : Racine de 2g */
    protected static readonly R2G: number;
    /** Peut-on calculer ZDV ? */
    protected _isZDVcalculable: boolean;
    private _loiDebit;
    constructor(prms: StructureParams, dbg?: boolean);
    /**
     * true si la structure est une vanne levante
     * @see StructureVanLevLarinier
     * @see StructureVanLevVillemonte
     */
    protected get isVanneLevante(): boolean;
    get isZDVcalculable(): boolean;
    /**
     * paramètres castés au bon type
     */
    get prms(): StructureParams;
    get W(): number;
    get loiDebit(): LoiDebit;
    protected setLoiDebit(ld: LoiDebit): void;
    setParent(p: Nub): void;
    private updateStructureType;
    /**
     * Returns the nth visible parameter (used in nghyd/PabTable)
     */
    getNthVisibleParam(n: number): ParamDefinition;
    /**
     * Calcul d'une équation quelle que soit l'inconnue à calculer.
     * Gestion du débit nul et de l'inversion de débit
     * @param sVarCalc nom de la variable à calculer
     * @param rInit valeur initiale de la variable à calculer dans le cas de la dichotomie
     */
    Calc(sVarCalc: string, rInit?: number): Result;
    /**
     * Equation preprocessing
     * @return true if inverted discharge
     */
    Equation(sVarCalc: string): Result;
    /**
     * Function to implement for the stage discharge equation of hydraulic structure
     */
    protected abstract CalcQ(): Result;
    protected getResultData(): {
        ENUM_StructureFlowMode: StructureFlowMode;
        ENUM_StructureFlowRegime: StructureFlowRegime;
        ENUM_StructureJetType: StructureJetType;
    };
    /**
     * paramétrage de la calculabilité des paramètres
     */
    protected setParametersCalculability(): void;
    /**
     * Give the flow mode : weir or orifice flow
     */
    protected getFlowMode(): StructureFlowMode;
    /**
     * Give the flow regime for a rectangular section : free, partially submerged or submerged flow
     */
    protected getFlowRegime(): StructureFlowRegime;
    /**
     * Give the Jet Type for weir flow
     * Cf. Baudoin J.M., Burgun V., Chanseau M., Larinier M., Ovidio M., Sremski W., Steinbach P. et Voegtle B., 2014.
     * Evaluer le franchissement des obstacles par les poissons. Principes et méthodes. Onema. 200 pages
     */
    protected getJetType(): StructureJetType;
    protected exposeResults(): void;
    getFirstAnalyticalParameter(): ParamDefinition;
}
//# sourceMappingURL=structure.d.ts.map