
 // -*- C++ -*-

 namespace Katabatic {

 /*! \class        GCellGrid
  *
  *  \brief        GCell Grid
  *
  *                The GCell Grid of Katabatic. Although the base template class
  *                Grid support irregular grid, the GCellGrid is regular, following
  *                the Knik global router GCells. Only the topmost row and leftmost
  *                column may have different height or width to cope with the
  *                design real size.
  *
  *                Due to the regular nature of the grid, the horizontal & vertical
  *                edges capacities are all identical, and initialized from the
  *                Katabatic Configuration.
  *
  *                The grid is build from the Knik global routing, so obviously
  *                a KnikEngine must be attached to the Cell when building the
  *                GCellGrid. An error is thrown otherwise.
  */

 //! \function     GCellGrid* GCellGrid::create( KatabaticEngine* ktbt );
 //!               API-space contructor.

 //! \function     void  GCellGrid::_postCreate ();
 //!               Perform the GCell & GCell vector allocation.
 //!                 - Read the horizontal and vertical cut lines from Knik and translate
 //!                   them into BaseGrid::Axis.
 //!                 - From the BaseGrid::Axis, deduces the exact positions of the GCells and
 //!                   allocate them.
 //!                 - The GCell allocation is done in a "row by row" fashion consistent
 //!                   with BaseGrid implicit assumptions.

 //! \function     void  GCellGrid::_preDestroy ();
 //!               The GCells are deleted at this point.

 //! \function     Cell* GCellGrid::getCell() const;
 //! \sreturn      The associated Cell.

 //! \function     KatabaticEngine* GCellGrid::getKatabatic() const;
 //! \sreturn      The associated KatabaticEngine.

 //! \function     unsigned int  GCellGrid::getDensityMode() const;
 //! \sreturn      The computation mode of the GCell densities.

 //! \function     size_t  GCellGrid::getHEdgeCapacity() const;
 //! \sreturn      The horizontal edge capacity. As the matrix is regular it is
 //!               identical for all horizontal edges.

 //! \function     size_t  GCellGrid::getVEdgeCapacity() const;
 //! \sreturn      The vertical edge capacity. As the matrix is regular it is
 //!               identical for all vertical edges.

 //! \function     Interval  GCellGrid::getUSide( unsigned int direction ) const;
 //! \sreturn      The side of the whole grid in \c direction.

 //! \function     size_t  GCellGrid::checkDensity() const;
 //! \sreturn      The number of GCell saturateds.
 //!
 //!               Check all GCells for saturations.

 //! \function     bool  GCellGrid::checkEdgeSaturation( float threshold ) const;
 //! \sreturn      \true if at least one edge is over \c threshold (percentage
 //!               of occupation).
 //!
 //!               Check all the edges for saturations.

 //! \function     void  GCellGrid::setDensityMode( unsigned int mode );
 //!               Sets the density computation mode.

 //! \function     void  GCellGrid::updateContacts( unsigned int flags=KbOpenSession );
 //!               Force an update on all AutoContact on all the GCells.
 //!               if \c openSession is \true, enclose the update in a Session.

 //! \function     size_t  GCellGrid::updateDensity();
 //! \sreturn      The number of GCell saturateds.
 //!
 //!               Force a density update on all the GCells.

 //! \enum         GCellGrid::DensityMode
 //!               Various ways of computing the overall density of a GCell.

 //! \var          GCellGrid::AverageHVDensity
 //!               The average density all depths accounted.

 //! \var          GCellGrid::AverageHDensity
 //!               The average density of horizontal layers.

 //! \var          GCellGrid::AverageVDensity
 //!               The average density of horizontal layers.

 //! \var          GCellGrid::MaxHVDensity
 //!               The maximum of the average horizontal & vertical densities taken
 //!               as a whole.

 //! \var          GCellGrid::MaxVDensity
 //!               The maximum of the average vertical densities taken depth by depth.

 //! \var          GCellGrid::MaxHDensity
 //!               The maximum of the average horizontal densities taken depth by depth.

 //! \var          GCellGrid::MaxDensity
 //!               The maximum of the average horizontal & vertical densities
 //!               taken depth by depth.

 } 

