// -*- C++ -*- namespace Kite { /*! \mainpage Detailed Router Documentation * * This documentation adresses two level of explanations : * * * * * \defgroup AlgorithmOverview Algorithm Overview (internal) * * The algorithm top-level is implemented in the \c NegociateWindow. * * First step : NegociateWindow::_loadRouting() *
    *
  1. Load routing wires (\c AutoSegment) from \c KatabaticEngine * inside the Kite \c GCell's. Then update the \c GCell's density. *
  2. Sort the \c GCell's according to decreasing density (denser * \c GCell's are to be routed first). *
  3. Agglomerate clusters of contiguous GCell's whose density * is superior to 0.7 to the seed GCell. See \c GCellRoutingSet * for the mechanism. * * GCellRoutingSet receive an increasing order number. The higher * the order the lower the density. This order is transmitted * to the \c TrackSegment of the \c GCellRoutingSet to be taken into * account by the track cost function. *
* * Second step : \c NegociateWindow::_runOnGCellRoutingSet() * * For each \c GCellRoutingSet in decreasing density, negociate the * set of associated \c TrackSegment. *
    *
  1. Build a \c RoutingEventQueue from the list of \c TrackSegment. * The queue is responsible for allocating the \c RoutingEvent * associated to each \c TrackSegment. *
  2. The queue is sorted according to the "event level" then * to the priority, which is for now the slack of the \c TrackSegment. * That is, constrained \c TrackSegment are routed first. *
  3. The queue is processed till it's empty (no unprocessed \c RoutingEvent * remains). * * Processing a \c RoutingEvent is trying to insert a \c TrackSegment in * a suitable Track. We proceed as follow : * * * When a TrackSegment is riped up, it is re-routed immediately * afterward. This is done by increasing his event level. *
*/ /*! \namespace Kite * \brief The namespace dedicated to Kite. */ }