import { Nub } from "../internal_modules";
import { ParamDefinition } from "../internal_modules";
import { Result } from "../internal_modules";
import { PreBarrageParams } from "../internal_modules";
import { PbBassin, IPbBassinZstat } from "../internal_modules";
import { PbCloison } from "../internal_modules";
export declare class PreBarrage extends Nub {
    /** Liste des cloisons amont */
    private _cloisonsAmont;
    maxIterations: number;
    /** Pointeurs vers les bassins dans this.children */
    private _bassins;
    /** Coefficient de relaxation pour la répartition des débits */
    private _relax;
    /** Precision du calcul  (Min. 1E-4) */
    private _precision;
    constructor(prms: PreBarrageParams, dbg?: boolean);
    /**
     * paramètres castés au bon type
     */
    get prms(): PreBarrageParams;
    /**
     * enfants castés au bon type
     */
    get children(): (PbCloison | PbBassin)[];
    get bassins(): PbBassin[];
    get cloisonsAmont(): PbCloison[];
    /**
     * Removes a child, along with all features (basins or walls) that are
     * related only to it, and pointers to it
     */
    deleteChild(index: number): void;
    /**
     * Returns true if at least one path is connecting river upstream to river downstream,
     * using at least one basin (direct connection without basin doesn't count)
     */
    hasUpDownConnection(startWall?: PbCloison, nbBasins?: number, visited?: PbCloison[]): boolean;
    /**
     * Returns true if at least one basin is lacking upstream or downstream connection (or both)
     */
    hasBasinNotConnected(): boolean;
    /**
     * Returns the child (basin or wall) having the given UID, along with its position
     * among the _children array (*not* the _bassins array !)
     */
    protected findChildAndPosition(uid: string): {
        child: PbBassin | PbCloison;
        position: number;
    };
    /**
     * Returns the child (basin or wall) having the given UID
     */
    findChild(uid: string): PbBassin | PbCloison;
    /**
     * Returns the position of the child (basin or wall) having the given UID,
     * among the _children array (*not* the _bassins array !)
     */
    findChildPosition(uid: string): number;
    /**
     * Returns the position of the basin having the given UID,
     * among the _bassins array (*not* the _children array !)
     */
    findBasinPosition(uid: string): number;
    /**
     * Moves the basin having the given UID, so that it becomes
     * basin #newBasinNumber, by reordering _children array and
     * rebuilding _bassins array afterwards
     */
    moveBasin(uid: string, newBasinNumber: number): void;
    /**
     * Detect duplicate walls between same basins pair, and merges
     * them into one wall containing all the previous walls' structures.
     */
    private detectAndMergeDuplicateWalls;
    /**
     * Finds all walls connected to the given basin's upstream (is upstream is true) or
     * downstream. Among those walls, finds those who have the same basin at their
     * opposite connection and merges them into one wall.
     * @param b
     * @param upstream
     */
    private mergeDuplicateWalls;
    /**
     * Given a list of walls, moves all structures belonging to
     * structures #2+ into structure #1, and removes structures
     * #2+ from the current PreBarrage
     * @param walls
     */
    private mergeStructuresInFirstWall;
    /**
     * 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
     */
    CalcSerie(rInit?: number): Result;
    Calc(sVarCalc: string, rInit?: number): Result;
    /**
     * Calcul de Z1 pour une valeur fixe des paramètres
     * @param sVarCalc ignoré: Z1 uniquement
     */
    Equation(sVarCalc: string): Result;
    /**
     * Checks pass geometry before calculation; adds relevant log messages
     */
    protected checkGeometry(): Result;
    protected setParametersCalculability(): void;
    protected adjustChildParameters(child: (PbCloison | PbBassin)): void;
    /** Clears basins list then builds it again fom children list */
    updatePointers(): void;
    private isMeshed;
    private CalcQ;
    CalcZ1Cloisons(cloisons: PbCloison[]): IPbBassinZstat;
    getMinZDV(cloisons: PbCloison[]): number;
    /**
     * Fills the current Nub with parameter values, provided an object representation
     * @param obj object representation of a Nub content (parameters)
     * @returns the calculated parameter found, if any - used by child Nub to notify
     *          its parent of the calculated parameter to set
     */
    loadObjectRepresentation(obj: any): {
        p: ParamDefinition;
        hasErrors: boolean;
        changedUids: {
            [key: string]: string;
        };
    };
}
//# sourceMappingURL=pre_barrage.d.ts.map