// -*- 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. }