743 lines
27 KiB
C++
743 lines
27 KiB
C++
|
|
// -*- C++ -*-
|
|
//
|
|
// This file is part of the Coriolis Software.
|
|
// Copyright (c) UPMC/LIP6 2008-2010, All Rights Reserved
|
|
//
|
|
// ===================================================================
|
|
//
|
|
// $Id$
|
|
//
|
|
// x-----------------------------------------------------------------x
|
|
// | |
|
|
// | C O R I O L I S |
|
|
// | M a u k a - P l a c e r |
|
|
// | |
|
|
// | Author : Jean-Paul Chaput |
|
|
// | E-mail : Jean-Paul.Chaput@lip6.fr |
|
|
// | =============================================================== |
|
|
// | C++ Module : "./ConfigurationWidget.cpp" |
|
|
// | *************************************************************** |
|
|
// | U p d a t e s |
|
|
// | |
|
|
// x-----------------------------------------------------------------x
|
|
|
|
|
|
#include <QLabel>
|
|
#include <QPushButton>
|
|
#include <QFrame>
|
|
#include <QHBoxLayout>
|
|
#include <QVBoxLayout>
|
|
#include <QGridLayout>
|
|
#include <QCheckBox>
|
|
#include <QComboBox>
|
|
#include <QLineEdit>
|
|
#include <QIntValidator>
|
|
#include <QDoubleValidator>
|
|
|
|
#include "hurricane/viewer/Graphics.h"
|
|
#include "nimbus/Configuration.h"
|
|
#include "metis/Configuration.h"
|
|
#include "metis/MetisEngine.h"
|
|
#include "mauka/Configuration.h"
|
|
#include "mauka/ConfigurationWidget.h"
|
|
|
|
|
|
namespace Mauka {
|
|
|
|
using Hurricane::Graphics;
|
|
using Metis::MetisEngine;
|
|
|
|
|
|
// -------------------------------------------------------------------
|
|
// Class : "Mauka::ConfigurationWidget".
|
|
|
|
|
|
ConfigurationWidget::ConfigurationWidget ( QWidget* parent )
|
|
: QWidget(parent)
|
|
, _nimbusConfiguration (NULL)
|
|
, _metisConfiguration (NULL)
|
|
, _maukaConfiguration (NULL)
|
|
, _partOrKWayHMetisState (new QCheckBox())
|
|
, _standardAnnealingState (new QCheckBox())
|
|
, _ignorePinsState (new QCheckBox())
|
|
, _plotBinsState (new QCheckBox())
|
|
, _pinsPlacementState (new QCheckBox())
|
|
, _hmetisCustomOptionsState (new QCheckBox())
|
|
, _hmetisNRunsEdit (new QLineEdit())
|
|
, _hmetisCTypeCombo (new QComboBox())
|
|
, _hmetisRTypeCombo (new QComboBox())
|
|
, _hmetisVCycleCombo (new QComboBox())
|
|
, _hmetisReconstCombo (new QComboBox())
|
|
, _numberOfInstancesStopCriterionEdit(new QLineEdit())
|
|
, _globalConnectionsWeightRatioEdit (new QLineEdit())
|
|
, _ubFactorEdit (new QLineEdit())
|
|
, _searchRatioEdit (new QLineEdit())
|
|
, _annealingNetMultEdit (new QLineEdit())
|
|
, _annealingBinMultEdit (new QLineEdit())
|
|
, _annealingRowMultEdit (new QLineEdit())
|
|
, _aspectRatioEdit (new QLineEdit())
|
|
, _marginEdit (new QLineEdit())
|
|
{
|
|
setAttribute ( Qt::WA_QuitOnClose, false );
|
|
|
|
QVBoxLayout* vLayout = new QVBoxLayout ();
|
|
QGridLayout* gLayout = new QGridLayout ();
|
|
|
|
// Metis configuration.
|
|
const int metisRow = 0;
|
|
|
|
QLabel* label = new QLabel();
|
|
label->setFont ( Graphics::getNormalFont(true) );
|
|
label->setText ( "hMETIS - Partionner" );
|
|
gLayout->addWidget ( label, metisRow+0, 0, 1, 4, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "Recursive 2-parts (vs. K-Way)" );
|
|
_partOrKWayHMetisState->setEnabled ( false );
|
|
gLayout->addWidget ( label , metisRow+1, 0, Qt::AlignRight );
|
|
gLayout->addWidget ( _partOrKWayHMetisState, metisRow+1, 1, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "Partition Size Stop" );
|
|
_numberOfInstancesStopCriterionEdit->setValidator ( new QIntValidator(this) );
|
|
_numberOfInstancesStopCriterionEdit->setEnabled ( false );
|
|
gLayout->addWidget ( label , metisRow+2, 0, Qt::AlignRight );
|
|
gLayout->addWidget ( _numberOfInstancesStopCriterionEdit, metisRow+2, 1, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "Global Connections Weight" );
|
|
_globalConnectionsWeightRatioEdit->setValidator ( new QIntValidator(this) );
|
|
_globalConnectionsWeightRatioEdit->setEnabled ( false );
|
|
gLayout->addWidget ( label , metisRow+3, 0, Qt::AlignRight );
|
|
gLayout->addWidget ( _globalConnectionsWeightRatioEdit, metisRow+3, 1, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "UB Factor" );
|
|
_ubFactorEdit->setValidator ( new QIntValidator(this) );
|
|
_ubFactorEdit->setEnabled ( false );
|
|
gLayout->addWidget ( label , metisRow+4, 0, Qt::AlignRight );
|
|
gLayout->addWidget ( _ubFactorEdit, metisRow+4, 1, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "Tune hMETIS parameters" );
|
|
_hmetisCustomOptionsState->setEnabled ( false );
|
|
gLayout->addWidget ( label , metisRow+1, 2, Qt::AlignRight );
|
|
gLayout->addWidget ( _hmetisCustomOptionsState, metisRow+1, 3, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "# of tried bisections" );
|
|
_hmetisNRunsEdit->setValidator ( new QIntValidator(this) );
|
|
_hmetisNRunsEdit->setEnabled ( false );
|
|
gLayout->addWidget ( label , metisRow+2, 2, Qt::AlignRight );
|
|
gLayout->addWidget ( _hmetisNRunsEdit, metisRow+2, 3, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "CType" );
|
|
_hmetisCTypeCombo->setEnabled ( false );
|
|
_hmetisCTypeCombo->addItem ( "Hybrid First Choice", Metis::Configuration::CTypeHFC );
|
|
_hmetisCTypeCombo->addItem ( "First Choice" , Metis::Configuration::CTypeFC );
|
|
_hmetisCTypeCombo->addItem ( "Greedy First Choice", Metis::Configuration::CTypeGFC );
|
|
_hmetisCTypeCombo->addItem ( "Hyper Edge" , Metis::Configuration::CTypeHyperEdge );
|
|
_hmetisCTypeCombo->addItem ( "Edge" , Metis::Configuration::CTypeEdge );
|
|
gLayout->addWidget ( label , metisRow+3, 2, Qt::AlignRight );
|
|
gLayout->addWidget ( _hmetisCTypeCombo, metisRow+3, 3, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "RType" );
|
|
_hmetisRTypeCombo->setEnabled ( false );
|
|
_hmetisRTypeCombo->addItem ( "Fiduccia-Mattheyses", Metis::Configuration::RTypeFM );
|
|
_hmetisRTypeCombo->addItem ( "One Way FM" , Metis::Configuration::RTypeOneWayFM );
|
|
_hmetisRTypeCombo->addItem ( "Early Exit FM" , Metis::Configuration::RTypeEarlyExitFM );
|
|
gLayout->addWidget ( label , metisRow+4, 2, Qt::AlignRight );
|
|
gLayout->addWidget ( _hmetisRTypeCombo, metisRow+4, 3, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "V-Cycle" );
|
|
_hmetisVCycleCombo->setEnabled ( false );
|
|
_hmetisVCycleCombo->addItem ( "No V-Cycle Refinement" , Metis::Configuration::VCycleDisable );
|
|
_hmetisVCycleCombo->addItem ( "On Each Final Bisections" , Metis::Configuration::VCycleFinal );
|
|
_hmetisVCycleCombo->addItem ( "On Best Itermediate Solutions", Metis::Configuration::VCycleBestIntermed );
|
|
_hmetisVCycleCombo->addItem ( "On All Intermediate Solutions", Metis::Configuration::VCycleAllIntermed );
|
|
gLayout->addWidget ( label , metisRow+5, 2, Qt::AlignRight );
|
|
gLayout->addWidget ( _hmetisVCycleCombo, metisRow+5, 3, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "Reconst" );
|
|
_hmetisReconstCombo->setEnabled ( false );
|
|
_hmetisReconstCombo->addItem ( "Ignore cut hyperedges" , Metis::Configuration::ReconstRemoveCutHE );
|
|
_hmetisReconstCombo->addItem ( "Keep parts of cuts hyperedges", Metis::Configuration::ReconstKeepCutHE );
|
|
gLayout->addWidget ( label , metisRow+6, 2, Qt::AlignRight );
|
|
gLayout->addWidget ( _hmetisReconstCombo, metisRow+6, 3, Qt::AlignLeft );
|
|
|
|
QFrame* separator = new QFrame ();
|
|
separator->setFrameShape ( QFrame::HLine );
|
|
separator->setFrameShadow ( QFrame::Sunken );
|
|
gLayout->addWidget ( separator, metisRow+7, 0, 1, 4 );
|
|
|
|
// Nimbus configuration.
|
|
const int nimbusRow = metisRow+8;
|
|
|
|
label = new QLabel();
|
|
label->setFont ( Graphics::getNormalFont(true) );
|
|
label->setText ( "Mauka - Placer" );
|
|
gLayout->addWidget ( label, nimbusRow+0, 0, 1, 4, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "Pins Placement" );
|
|
_pinsPlacementState->setEnabled ( false );
|
|
gLayout->addWidget ( label , nimbusRow+1, 0, Qt::AlignRight );
|
|
gLayout->addWidget ( _pinsPlacementState, nimbusRow+1, 1, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "Aspect Ratio: X/Y (%)" );
|
|
_aspectRatioEdit->setValidator ( new QDoubleValidator(this) );
|
|
_aspectRatioEdit->setEnabled ( false );
|
|
gLayout->addWidget ( label , nimbusRow+1, 2, Qt::AlignRight );
|
|
gLayout->addWidget ( _aspectRatioEdit, nimbusRow+1, 3, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "Space Margin (%)" );
|
|
_marginEdit->setValidator ( new QDoubleValidator(this) );
|
|
_marginEdit->setEnabled ( false );
|
|
gLayout->addWidget ( label , nimbusRow+2, 2, Qt::AlignRight );
|
|
gLayout->addWidget ( _marginEdit, nimbusRow+2, 3, Qt::AlignLeft );
|
|
|
|
separator = new QFrame ();
|
|
separator->setFrameShape ( QFrame::HLine );
|
|
separator->setFrameShadow ( QFrame::Sunken );
|
|
gLayout->addWidget ( separator, nimbusRow+3, 0, 1, 4 );
|
|
|
|
// Mauka configuration.
|
|
const int maukaRow = nimbusRow+4;
|
|
|
|
label = new QLabel();
|
|
label->setText ( "Standard Annealing" );
|
|
_standardAnnealingState->setEnabled ( false );
|
|
gLayout->addWidget ( label , maukaRow+0, 0, Qt::AlignRight );
|
|
gLayout->addWidget ( _standardAnnealingState, maukaRow+0, 1, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "Ignore Pins" );
|
|
_ignorePinsState->setEnabled ( false );
|
|
gLayout->addWidget ( label , maukaRow+1, 0, Qt::AlignRight );
|
|
gLayout->addWidget ( _ignorePinsState, maukaRow+1, 1, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "Plot Bins" );
|
|
_plotBinsState->setEnabled ( false );
|
|
gLayout->addWidget ( label , maukaRow+2, 0, Qt::AlignRight );
|
|
gLayout->addWidget ( _plotBinsState, maukaRow+2, 1, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "Search Ratio (%)" );
|
|
_searchRatioEdit->setValidator ( new QDoubleValidator(this) );
|
|
_searchRatioEdit->setEnabled ( false );
|
|
gLayout->addWidget ( label , maukaRow+0, 2, Qt::AlignRight );
|
|
gLayout->addWidget ( _searchRatioEdit, maukaRow+0, 3, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "Annealing Net Mult (%)" );
|
|
_annealingNetMultEdit->setValidator ( new QDoubleValidator(this) );
|
|
_annealingNetMultEdit->setEnabled ( false );
|
|
gLayout->addWidget ( label , maukaRow+1, 2, Qt::AlignRight );
|
|
gLayout->addWidget ( _annealingNetMultEdit, maukaRow+1, 3, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "Annealing Bin Mult (%)" );
|
|
_annealingBinMultEdit->setValidator ( new QDoubleValidator(this) );
|
|
_annealingBinMultEdit->setEnabled ( false );
|
|
gLayout->addWidget ( label , maukaRow+2, 2, Qt::AlignRight );
|
|
gLayout->addWidget ( _annealingBinMultEdit, maukaRow+2, 3, Qt::AlignLeft );
|
|
|
|
label = new QLabel();
|
|
label->setText ( "Annealing Row Mult (%)" );
|
|
_annealingRowMultEdit->setValidator ( new QDoubleValidator(this) );
|
|
_annealingRowMultEdit->setEnabled ( false );
|
|
gLayout->addWidget ( label , maukaRow+3, 2, Qt::AlignRight );
|
|
gLayout->addWidget ( _annealingRowMultEdit, maukaRow+3, 3, Qt::AlignLeft );
|
|
|
|
separator = new QFrame ();
|
|
separator->setFrameShape ( QFrame::HLine );
|
|
separator->setFrameShadow ( QFrame::Sunken );
|
|
gLayout->addWidget ( separator, maukaRow+4, 0, 1, 4 );
|
|
|
|
vLayout->addLayout ( gLayout );
|
|
|
|
QHBoxLayout* hLayout = new QHBoxLayout ();
|
|
hLayout->addStretch ();
|
|
|
|
QPushButton* apply = new QPushButton ();
|
|
apply->setText ( tr("Apply") );
|
|
hLayout->addWidget ( apply );
|
|
hLayout->addStretch ();
|
|
|
|
vLayout->addLayout ( hLayout );
|
|
vLayout->addStretch ();
|
|
|
|
setLayout ( vLayout );
|
|
|
|
connect ( apply, SIGNAL(clicked()), this, SLOT(_applySettings()) );
|
|
connect ( _hmetisCustomOptionsState, SIGNAL(stateChanged(int)), this, SLOT(_enableHMetisOptions(int)) );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::setConfiguration ( Nimbus::Configuration* nimbusConfig
|
|
, Metis::Configuration* metisConfig
|
|
, Configuration* maukaConfig )
|
|
{
|
|
_nimbusConfiguration = nimbusConfig;
|
|
_metisConfiguration = metisConfig;
|
|
_maukaConfiguration = maukaConfig;
|
|
|
|
if ( maukaConfig != NULL ) {
|
|
_searchRatioEdit ->setText ( QString("%1").arg(maukaConfig ->getSearchRatio()) );
|
|
_annealingNetMultEdit->setText ( QString("%1").arg(maukaConfig ->getAnnealingNetMult()) );
|
|
_annealingBinMultEdit->setText ( QString("%1").arg(maukaConfig ->getAnnealingBinMult()) );
|
|
_annealingRowMultEdit->setText ( QString("%1").arg(maukaConfig ->getAnnealingRowMult()) );
|
|
_aspectRatioEdit ->setText ( QString("%1").arg(nimbusConfig->getAspectRatio()) );
|
|
_marginEdit ->setText ( QString("%1").arg(nimbusConfig->getMargin()) );
|
|
|
|
_standardAnnealingState->setChecked ( maukaConfig ->useStandardSimulatedAnnealing() );
|
|
_ignorePinsState ->setChecked ( maukaConfig ->doIgnorePins() );
|
|
_plotBinsState ->setChecked ( maukaConfig ->doPlotBins() );
|
|
_pinsPlacementState ->setChecked ( nimbusConfig->doPinsPlacement() );
|
|
|
|
_searchRatioEdit ->setEnabled ( true );
|
|
_annealingNetMultEdit ->setEnabled ( true );
|
|
_annealingBinMultEdit ->setEnabled ( true );
|
|
_annealingRowMultEdit ->setEnabled ( true );
|
|
_aspectRatioEdit ->setEnabled ( true );
|
|
_marginEdit ->setEnabled ( true );
|
|
_standardAnnealingState->setEnabled ( true );
|
|
_ignorePinsState ->setEnabled ( true );
|
|
_plotBinsState ->setEnabled ( true );
|
|
_pinsPlacementState ->setEnabled ( true );
|
|
|
|
if ( MetisEngine::isHMetisCapable() ) {
|
|
_partOrKWayHMetisState ->setChecked ( metisConfig->getPartOrKWayHMetis() );
|
|
_hmetisCustomOptionsState->setChecked ( (metisConfig->getHMetisOption(Metis::Configuration::CustomOptions) == 1) );
|
|
|
|
_hmetisCTypeCombo ->setCurrentIndex ( _hmetisCTypeToIndex () );
|
|
_hmetisRTypeCombo ->setCurrentIndex ( _hmetisRTypeToIndex () );
|
|
_hmetisVCycleCombo ->setCurrentIndex ( _hmetisVCycleToIndex() );
|
|
_hmetisReconstCombo->setCurrentIndex ( _hmetisReconstToIndex() );
|
|
|
|
_numberOfInstancesStopCriterionEdit->setText ( QString("%1").arg(metisConfig->getNumberOfInstancesStopCriterion()) );
|
|
_globalConnectionsWeightRatioEdit ->setText ( QString("%1").arg(metisConfig->getGlobalConnectionsWeightRatio()) );
|
|
_ubFactorEdit ->setText ( QString("%1").arg(metisConfig->getUbFactor()) );
|
|
_hmetisNRunsEdit ->setText ( QString("%1").arg(metisConfig->getHMetisOption(Metis::Configuration::HMetisNRuns)) );
|
|
|
|
_partOrKWayHMetisState ->setEnabled ( true );
|
|
_numberOfInstancesStopCriterionEdit->setEnabled ( true );
|
|
_globalConnectionsWeightRatioEdit ->setEnabled ( true );
|
|
_ubFactorEdit ->setEnabled ( true );
|
|
_hmetisCustomOptionsState ->setEnabled ( true );
|
|
|
|
_enableHMetisOptions ( _hmetisCustomOptionsState->checkState() );
|
|
}
|
|
} else {
|
|
_searchRatioEdit ->setEnabled ( false );
|
|
_annealingNetMultEdit ->setEnabled ( false );
|
|
_annealingBinMultEdit ->setEnabled ( false );
|
|
_annealingRowMultEdit ->setEnabled ( false );
|
|
_marginEdit ->setEnabled ( false );
|
|
_standardAnnealingState->setEnabled ( false );
|
|
_ignorePinsState ->setEnabled ( false );
|
|
_plotBinsState ->setEnabled ( false );
|
|
_pinsPlacementState ->setEnabled ( false );
|
|
|
|
_partOrKWayHMetisState ->setEnabled ( false );
|
|
_numberOfInstancesStopCriterionEdit->setEnabled ( false );
|
|
_globalConnectionsWeightRatioEdit ->setEnabled ( false );
|
|
_ubFactorEdit ->setEnabled ( false );
|
|
_hmetisCustomOptionsState ->setEnabled ( false );
|
|
_enableHMetisOptions ( Qt::Unchecked );
|
|
|
|
_nimbusConfiguration = NULL;
|
|
_metisConfiguration = NULL;
|
|
_maukaConfiguration = NULL;
|
|
}
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_enableHMetisOptions ( int state )
|
|
{
|
|
bool enable = (state != Qt::Unchecked);
|
|
|
|
_hmetisNRunsEdit ->setEnabled ( enable );
|
|
_hmetisCTypeCombo ->setEnabled ( enable );
|
|
_hmetisRTypeCombo ->setEnabled ( enable );
|
|
_hmetisVCycleCombo ->setEnabled ( enable );
|
|
_hmetisReconstCombo->setEnabled ( enable );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_applySettings ()
|
|
{
|
|
if ( _maukaConfiguration == NULL ) return;
|
|
|
|
_updatePartOrKWayHMetis ();
|
|
_updateNumberOfInstancesStopCriterion ();
|
|
_updateGlobalConnectionsWeightRatio ();
|
|
_updateUbFactor ();
|
|
_updateHMetisCustomOptions ();
|
|
_updateHMetisCType ();
|
|
_updateHMetisRType ();
|
|
_updateHMetisVCycle ();
|
|
_updateHMetisReconst ();
|
|
|
|
_updateStandardAnnealingState ();
|
|
_updateIgnorePinsState ();
|
|
_updatePlotBinsState ();
|
|
_updatePinsPlacementState ();
|
|
_updateSearchRatio ();
|
|
_updateAnnealingNetMult ();
|
|
_updateAnnealingBinMult ();
|
|
_updateAnnealingRowMult ();
|
|
_updateAspectRatio ();
|
|
_updateMargin ();
|
|
|
|
if ( MetisEngine::isHMetisCapable() ) {
|
|
_updatePartOrKWayHMetis ();
|
|
_updateNumberOfInstancesStopCriterion ();
|
|
_updateGlobalConnectionsWeightRatio ();
|
|
_updateUbFactor ();
|
|
_updateHMetisCustomOptions ();
|
|
_updateHMetisNRuns ();
|
|
_updateHMetisCType ();
|
|
_updateHMetisRType ();
|
|
_updateHMetisVCycle ();
|
|
_updateHMetisReconst ();
|
|
}
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateSearchRatio ()
|
|
{
|
|
if ( _maukaConfiguration == NULL ) return;
|
|
|
|
bool success = false;
|
|
float ratio = _searchRatioEdit->displayText().toFloat ( &success );
|
|
|
|
if ( success ) {
|
|
_maukaConfiguration->setSearchRatio ( ratio );
|
|
success = (_maukaConfiguration->getSearchRatio() == ratio);
|
|
}
|
|
|
|
if ( not success )
|
|
_searchRatioEdit->setText ( QString("%1").arg(_maukaConfiguration->getSearchRatio()) );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateAnnealingNetMult ()
|
|
{
|
|
if ( _maukaConfiguration == NULL ) return;
|
|
|
|
bool success = false;
|
|
float ratio = _annealingNetMultEdit->displayText().toFloat ( &success );
|
|
|
|
if ( success ) {
|
|
_maukaConfiguration->setAnnealingNetMult ( ratio );
|
|
success = (_maukaConfiguration->getAnnealingNetMult() == ratio);
|
|
}
|
|
|
|
if ( not success )
|
|
_annealingNetMultEdit->setText ( QString("%1").arg(_maukaConfiguration->getAnnealingNetMult()) );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateAnnealingBinMult ()
|
|
{
|
|
if ( _maukaConfiguration == NULL ) return;
|
|
|
|
bool success = false;
|
|
float ratio = _annealingBinMultEdit->displayText().toFloat ( &success );
|
|
|
|
if ( success ) {
|
|
_maukaConfiguration->setAnnealingBinMult ( ratio );
|
|
success = (_maukaConfiguration->getAnnealingBinMult() == ratio);
|
|
}
|
|
|
|
if ( not success )
|
|
_annealingBinMultEdit->setText ( QString("%1").arg(_maukaConfiguration->getAnnealingBinMult()) );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateAnnealingRowMult ()
|
|
{
|
|
if ( _maukaConfiguration == NULL ) return;
|
|
|
|
bool success = false;
|
|
float ratio = _annealingRowMultEdit->displayText().toFloat ( &success );
|
|
|
|
if ( success ) {
|
|
_maukaConfiguration->setAnnealingRowMult ( ratio );
|
|
success = (_maukaConfiguration->getAnnealingRowMult() == ratio);
|
|
}
|
|
|
|
if ( not success )
|
|
_annealingRowMultEdit->setText ( QString("%1").arg(_maukaConfiguration->getAnnealingRowMult()) );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateAspectRatio ()
|
|
{
|
|
if ( _nimbusConfiguration == NULL ) return;
|
|
|
|
bool success = false;
|
|
float ratio = _aspectRatioEdit->displayText().toFloat ( &success );
|
|
|
|
if ( success ) {
|
|
_nimbusConfiguration->setAspectRatio ( ratio );
|
|
success = (_nimbusConfiguration->getAspectRatio() == ratio);
|
|
}
|
|
|
|
if ( not success )
|
|
_aspectRatioEdit->setText ( QString("%1").arg(_nimbusConfiguration->getAspectRatio()) );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateMargin ()
|
|
{
|
|
if ( _nimbusConfiguration == NULL ) return;
|
|
|
|
bool success = false;
|
|
float ratio = _marginEdit->displayText().toFloat ( &success );
|
|
|
|
if ( success ) {
|
|
_nimbusConfiguration->setMargin ( ratio );
|
|
success = (_nimbusConfiguration->getMargin() == ratio);
|
|
}
|
|
|
|
if ( not success )
|
|
_marginEdit->setText ( QString("%1").arg(_nimbusConfiguration->getMargin()) );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateStandardAnnealingState ()
|
|
{
|
|
if ( _maukaConfiguration == NULL ) return;
|
|
|
|
_maukaConfiguration->setStandardSimulatedAnnealing ( _standardAnnealingState->isChecked() );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateIgnorePinsState ()
|
|
{
|
|
if ( _maukaConfiguration == NULL ) return;
|
|
|
|
_maukaConfiguration->setIgnorePins ( _ignorePinsState->isChecked() );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updatePlotBinsState ()
|
|
{
|
|
if ( _maukaConfiguration == NULL ) return;
|
|
|
|
_maukaConfiguration->setPlotBins ( _plotBinsState->isChecked() );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updatePinsPlacementState ()
|
|
{
|
|
if ( _nimbusConfiguration == NULL ) return;
|
|
|
|
_nimbusConfiguration->setPinsPlacement ( _pinsPlacementState->isChecked() );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updatePartOrKWayHMetis ()
|
|
{
|
|
if ( _metisConfiguration == NULL ) return;
|
|
|
|
_metisConfiguration->setPartOrKWayHMetis ( _partOrKWayHMetisState->isChecked() );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateHMetisCustomOptions ()
|
|
{
|
|
if ( _metisConfiguration == NULL ) return;
|
|
|
|
_metisConfiguration->setHMetisOption ( Metis::Configuration::CustomOptions
|
|
, (_hmetisCustomOptionsState->isChecked() ? 1 : 0) );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateNumberOfInstancesStopCriterion ()
|
|
{
|
|
if ( _metisConfiguration == NULL ) return;
|
|
|
|
bool success = false;
|
|
unsigned int limit = _numberOfInstancesStopCriterionEdit->displayText().toUInt ( &success );
|
|
|
|
if ( success ) {
|
|
_metisConfiguration->setNumberOfInstancesStopCriterion ( limit );
|
|
success = (_metisConfiguration->getNumberOfInstancesStopCriterion() == limit);
|
|
}
|
|
|
|
if ( not success )
|
|
_numberOfInstancesStopCriterionEdit->setText
|
|
( QString("%1").arg(_metisConfiguration->getNumberOfInstancesStopCriterion()) );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateGlobalConnectionsWeightRatio ()
|
|
{
|
|
if ( _metisConfiguration == NULL ) return;
|
|
|
|
bool success = false;
|
|
int weight = _globalConnectionsWeightRatioEdit->displayText().toInt ( &success );
|
|
|
|
if ( success ) {
|
|
_metisConfiguration->setGlobalConnectionsWeightRatio ( weight );
|
|
success = (_metisConfiguration->getGlobalConnectionsWeightRatio() == weight);
|
|
}
|
|
|
|
if ( not success )
|
|
_globalConnectionsWeightRatioEdit->setText
|
|
( QString("%1").arg(_metisConfiguration->getGlobalConnectionsWeightRatio()) );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateUbFactor ()
|
|
{
|
|
if ( _metisConfiguration == NULL ) return;
|
|
|
|
bool success = false;
|
|
int limit = _ubFactorEdit->displayText().toUInt ( &success );
|
|
|
|
if ( success ) {
|
|
_metisConfiguration->setUbFactor ( limit );
|
|
success = (_metisConfiguration->getUbFactor() == limit);
|
|
}
|
|
|
|
if ( not success )
|
|
_ubFactorEdit->setText ( QString("%1").arg(_metisConfiguration->getUbFactor()) );
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateHMetisNRuns ()
|
|
{
|
|
if ( _metisConfiguration == NULL ) return;
|
|
|
|
bool success = false;
|
|
int value = _hmetisNRunsEdit->displayText().toInt ( &success );
|
|
|
|
if ( success ) {
|
|
_metisConfiguration->setHMetisOption ( Metis::Configuration::HMetisNRuns, value );
|
|
success = (_metisConfiguration->getHMetisOption(Metis::Configuration::HMetisNRuns) == value);
|
|
}
|
|
|
|
if ( not success )
|
|
_numberOfInstancesStopCriterionEdit->setText
|
|
( QString("%1").arg(_metisConfiguration->getHMetisOption(Metis::Configuration::HMetisNRuns)) );
|
|
}
|
|
|
|
|
|
int ConfigurationWidget::_hmetisCTypeToIndex ()
|
|
{
|
|
if ( _metisConfiguration != NULL ) {
|
|
int value = _metisConfiguration->getHMetisOption ( Metis::Configuration::HMetisCType );
|
|
|
|
for ( int i=0 ; i<_hmetisCTypeCombo->count() ; ++i ) {
|
|
if ( value == _hmetisCTypeCombo->itemData(i).toInt() ) {
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateHMetisCType ()
|
|
{
|
|
if ( _metisConfiguration == NULL ) return;
|
|
|
|
int value = _hmetisCTypeCombo->itemData ( _hmetisCTypeCombo->currentIndex() ).toInt();
|
|
|
|
_metisConfiguration->setHMetisOption ( Metis::Configuration::HMetisCType, value );
|
|
}
|
|
|
|
|
|
int ConfigurationWidget::_hmetisRTypeToIndex ()
|
|
{
|
|
if ( _metisConfiguration != NULL ) {
|
|
int value = _metisConfiguration->getHMetisOption ( Metis::Configuration::HMetisRType );
|
|
|
|
for ( int i=0 ; i<_hmetisRTypeCombo->count() ; ++i ) {
|
|
if ( value == _hmetisRTypeCombo->itemData(i).toInt() ) {
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateHMetisRType ()
|
|
{
|
|
if ( _metisConfiguration == NULL ) return;
|
|
|
|
int value = _hmetisRTypeCombo->itemData ( _hmetisRTypeCombo->currentIndex() ).toInt();
|
|
|
|
_metisConfiguration->setHMetisOption ( Metis::Configuration::HMetisRType, value );
|
|
}
|
|
|
|
|
|
int ConfigurationWidget::_hmetisVCycleToIndex ()
|
|
{
|
|
if ( _metisConfiguration != NULL ) {
|
|
int value = _metisConfiguration->getHMetisOption ( Metis::Configuration::HMetisVCycle );
|
|
|
|
for ( int i=0 ; i<_hmetisVCycleCombo->count() ; ++i ) {
|
|
if ( value == _hmetisVCycleCombo->itemData(i).toInt() ) {
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateHMetisVCycle ()
|
|
{
|
|
if ( _metisConfiguration == NULL ) return;
|
|
|
|
int value = _hmetisVCycleCombo->itemData ( _hmetisVCycleCombo->currentIndex() ).toInt();
|
|
|
|
_metisConfiguration->setHMetisOption ( Metis::Configuration::HMetisVCycle, value );
|
|
}
|
|
|
|
|
|
int ConfigurationWidget::_hmetisReconstToIndex ()
|
|
{
|
|
if ( _metisConfiguration != NULL ) {
|
|
int value = _metisConfiguration->getHMetisOption ( Metis::Configuration::HMetisReconst );
|
|
|
|
for ( int i=0 ; i<_hmetisReconstCombo->count() ; ++i ) {
|
|
if ( value == _hmetisReconstCombo->itemData(i).toInt() ) {
|
|
return i;
|
|
}
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
void ConfigurationWidget::_updateHMetisReconst ()
|
|
{
|
|
if ( _metisConfiguration == NULL ) return;
|
|
|
|
int value = _hmetisReconstCombo->itemData ( _hmetisReconstCombo->currentIndex() ).toInt();
|
|
|
|
_metisConfiguration->setHMetisOption ( Metis::Configuration::HMetisReconst, value );
|
|
}
|
|
|
|
|
|
} // End of Mauka namespace.
|