Changeset 1423


Ignore:
Timestamp:
Apr 27, 2009 9:49:59 AM (11 years ago)
Author:
pbonami
Message:

Add support for Metis enforce time limit in strong branching

Location:
trunk
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk

    • Property svn:externals
      •  

        old new  
        66ThirdParty/FilterSQP https://projects.coin-or.org/svn/BuildTools/ThirdParty/FilterSQP/trunk
        77ThirdParty/Mumps https://projects.coin-or.org/svn/BuildTools/ThirdParty/Mumps/trunk
         8ThirdParty/Metis https://projects.coin-or.org/svn/BuildTools/ThirdParty/Metis/trunk
        89Data/Sample https://projects.coin-or.org/svn/Data/trunk/Sample
        910CoinUtils https://projects.coin-or.org/svn/CoinUtils/trunk/CoinUtils
  • trunk/Bonmin/src/Algorithms/Branching/BonChooseVariable.cpp

    r1360 r1423  
    5555    options->GetIntegerValue("bb_log_level", bb_log_level_, b.prefix());
    5656    handler_->setLogLevel(bb_log_level_);
     57    options->GetNumericValue("time_limit", time_limit_, b.prefix());
    5758    options->GetNumericValue("setup_pseudo_frac", setup_pseudo_frac_, b.prefix());
    5859    options->GetNumericValue("maxmin_crit_no_sol", maxmin_crit_no_sol_, b.prefix());
     
    8283    options->GetIntegerValue("number_look_ahead", numberLookAhead_, b.prefix());
    8384
     85    start_time_ = CoinCpuTime();
    8486  }
    8587
     
    8789      OsiChooseVariable(rhs),
    8890      results_(rhs.results_),
     91      time_limit_(rhs.time_limit_),
     92      start_time_(CoinCpuTime()),
    8993      cbc_model_(rhs.cbc_model_),
    9094      only_pseudo_when_trusted_(rhs.only_pseudo_when_trusted_),
     
    626630            (
    627631              only_pseudo_when_trusted_ && number_not_trusted_>0 ) ||
    628               !isRoot && (upNumber[iObject]<numberBeforeTrusted ||
    629                           downNumber[iObject]<numberBeforeTrusted )||
    630               isRoot && (!upNumber[iObject] && !downNumber[iObject]) ) {
     632              ( !isRoot && (upNumber[iObject]<numberBeforeTrusted ||
     633                          downNumber[iObject]<numberBeforeTrusted ))||
     634              ( isRoot && (!upNumber[iObject] && !downNumber[iObject])) ) {
    631635         
    632636             results_.push_back(HotInfo(solver, info,
     
    743747      if ( bestObjectIndex_ >=0 ) {
    744748        OsiObject * obj = solver->objects()[bestObjectIndex_];
    745         obj->setWhichWay(       bestWhichWay_);
     749        obj->setWhichWay(bestWhichWay_);
    746750        message(BRANCH_VAR)<<obj->columnNumber()<< bestWhichWay_
    747751        <<CoinMessageEol;
     
    898902        }
    899903      }
    900       bool hitMaxTime = ( CoinCpuTime()-timeStart > info->timeRemaining_);
     904      bool hitMaxTime = ( CoinCpuTime()-timeStart > info->timeRemaining_)
     905                        || ( CoinCpuTime() - start_time_ > time_limit_);
    901906      if (hitMaxTime) {
    902907        returnCode=3;
  • trunk/Bonmin/src/Algorithms/Branching/BonChooseVariable.hpp

    r1164 r1423  
    276276    BonChooseVariable ();
    277277
     278    /** Global time limit for algorithm. */
     279    double time_limit_;
     280
     281    /** Starting time of algorithm.*/
     282    double start_time_;
    278283  protected:
    279284    /// CbcModel, used to get status of search
  • trunk/Bonmin/src/CbcBonmin/BonCbc.cpp

    r1422 r1423  
    115115    bonBabInfoPtr->setBabPtr(this);
    116116
     117    s.nonlinearSolver()->solver()->setup_global_time_limit(s.getDoubleParameter(BabSetupBase::MaxTime));
    117118    OsiSolverInterface * solver = s.continuousSolver()->clone();
    118119    delete modelHandler_;
     
    120121    model_.passInMessageHandler(modelHandler_);
    121122    model_.assignSolver(solver, true);
     123
    122124
    123125    //  s.continuousSolver() = model_.solver();
  • trunk/Bonmin/src/Interfaces/BonOsiTMINLPInterface.cpp

    r1422 r1423  
    764764const char * OsiTMINLPInterface::UNBOUND_SYMB="UNBOUNDED";
    765765const char * OsiTMINLPInterface::INFEAS_SYMB="INFEAS";
     766const char * OsiTMINLPInterface::TIME_SYMB="TIME";
    766767///////////////////////////////////////////////////////////////////
    767768// WarmStart Information                                                                           //
  • trunk/Bonmin/src/Interfaces/BonOsiTMINLPInterface.hpp

    r1408 r1423  
    175175    return app_->prefix();
    176176  }
     177  //@}
    177178  //---------------------------------------------------------------------------
    178179  /**@name Solve methods */
     
    303304     long as the data is unchanged and the solver is not called.
    304305  */
    305   //@{
    306   /**@name Methods related to querying the input data */
    307306  //@{
    308307  /// Get number of columns
     
    12331232static const char * FAILED_SYMB;
    12341233static const char * INFEAS_SYMB;
     1234static const char * TIME_SYMB;
    12351235static const char * UNBOUND_SYMB;
    12361236  /** Get status as a char * for log.*/
     
    12421242    else if(r == TNLPSolver::unbounded){
    12431243      return UNBOUND_SYMB;}
     1244    else if(r == TNLPSolver::timeLimit){
     1245      return TIME_SYMB;}
    12441246    else return FAILED_SYMB;
    12451247  }
  • trunk/Bonmin/src/Interfaces/BonTNLPSolver.cpp

    r1405 r1423  
    3838   
    3939   
    40   TNLPSolver::TNLPSolver()
     40  TNLPSolver::TNLPSolver():
     41    start_time_(0),
     42    time_limit_(DBL_MAX)
    4143  {
    4244    initializeOptionsAndJournalist();
     
    5052    options_(options),
    5153    roptions_(roptions),
    52     prefix_(prefix)
     54    prefix_(prefix),
     55    start_time_(0),
     56    time_limit_(DBL_MAX)
    5357  {
     58  }
     59
     60  TNLPSolver::TNLPSolver(const TNLPSolver &other):
     61    journalist_(other.journalist_),
     62    options_(NULL),
     63    roptions_(other.roptions_),
     64    prefix_(other.prefix_),
     65    start_time_(other.start_time_),
     66    time_limit_(other.time_limit_){
     67      options_ = new Ipopt::OptionsList();
     68      *options_ = *other.options_;
    5469  }
    5570 
     
    235250  bool
    236251  TNLPSolver::isRecoverable(ReturnStatus &r){
    237     return (r >=0 || (r != illDefinedProblem && r != illegalOption && r != computationError) );
     252    return (r >=0 || (r != illDefinedProblem && r != illegalOption && r != computationError && r != timeLimit) );
    238253  }
    239254
  • trunk/Bonmin/src/Interfaces/BonTNLPSolver.hpp

    r1360 r1423  
    1818#include "CoinWarmStart.hpp"
    1919#include "BonRegisteredOptions.hpp"
     20#include "CoinTime.hpp"
    2021namespace Bonmin  {
    2122/** This is a generic class for calling an NLP solver to solve a TNLP.
     
    2829  enum ReturnStatus /** Standard return statuses for a solver*/{
    2930    iterationLimit = -3/** Solver reached iteration limit. */,
     31    timeLimit = 5/** Solver reached iteration limit. */,
    3032    doesNotConverge = -8/** Algorithm does not converge.*/,
    3133    computationError = -2/** Some error was made in the computations. */,
     
    191193  bool isRecoverable(ReturnStatus &r);
    192194
    193 
     195  /** Setup for a global time limit for solver.*/
     196  void setup_global_time_limit(double time_limit){
     197    time_limit_ = time_limit + 5;
     198    start_time_ = CoinCpuTime();
     199  }
    194200
    195201  /** Say if return status is an error.*/
     
    218224    /** Prefix to use for reading bonmin's options.*/
    219225   std::string prefix_;
    220    private:
    221    /// There is no copy constructor for this class
    222    TNLPSolver(TNLPSolver &other);
     226   /** Global start time.*/
     227   double start_time_;
     228
     229   /** Global time limit.*/
     230   double time_limit_;
     231
     232  /// Copy Constructor
     233  TNLPSolver(const TNLPSolver & other);
     234
    223235};
    224236}
  • trunk/Bonmin/src/Interfaces/Filter/BonFilterSolver.cpp

    r1360 r1423  
    364364
    365365
     366  FilterSolver::FilterSolver(const FilterSolver & other):
     367      TNLPSolver(other),
     368      warmF_(NULL),
     369      cached_(NULL)
     370  {
     371    warmF_ = (other.warmF_.IsValid()) ? dynamic_cast<FilterWarmStart *>(other.warmF_->clone()):NULL;
     372  }
     373
    366374  Ipopt::SmartPtr <TNLPSolver>
    367375  FilterSolver::clone()
    368376  {
    369     Ipopt::SmartPtr<FilterSolver> retval = new FilterSolver(true);
    370     *retval->options_ = *options_; // Copy the options
    371     retval->roptions_ = roptions_; // only copy pointers of registered options
    372     retval->journalist_ = journalist_; // and journalist
    373     retval->prefix_ = prefix_;
    374     retval->warmF_ = (warmF_.IsValid()) ? dynamic_cast<FilterWarmStart *>(warmF_->clone()):NULL;
     377    Ipopt::SmartPtr<FilterSolver> retval = new FilterSolver(*this);
    375378    return GetRawPtr(retval);
    376379  }
  • trunk/Bonmin/src/Interfaces/Filter/BonFilterSolver.hpp

    r1360 r1423  
    6868                );
    6969
     70    /// Copy constructor
     71    FilterSolver(const FilterSolver & other);
    7072    ///destructor
    7173    virtual ~FilterSolver();
  • trunk/Bonmin/src/Interfaces/Ipopt/BonIpoptSolver.cpp

    r1360 r1423  
    5454  {}
    5555
     56  IpoptSolver::IpoptSolver(const IpoptSolver &other):
     57    TNLPSolver(other),
     58    optimizationStatus_(other.optimizationStatus_),
     59    problemHadZeroDimension_(other.problemHadZeroDimension_),
     60    warmStartStrategy_(other.warmStartStrategy_),
     61    enable_warm_start_(false),
     62    optimized_before_(false){
     63      app_ = new Ipopt::IpoptApplication(GetRawPtr(roptions_), options_, journalist_);
     64  }
     65
    5666  ///virtual constructor
    5767  Ipopt::SmartPtr<TNLPSolver>
    5868  IpoptSolver::clone()
    5969  {
    60     SmartPtr<IpoptSolver> retval = new IpoptSolver(GetRawPtr(roptions_), new Ipopt::OptionsList(), journalist_, prefix_);
    61     *retval->options_ = *options_;
    62     retval->warmStartStrategy_ = warmStartStrategy_;
    63     retval->problemHadZeroDimension_ = problemHadZeroDimension_;
    64     retval->optimizationStatus_ = optimizationStatus_;
    65 
    66     enable_warm_start_ = false;
    67     optimized_before_ = false;
     70    SmartPtr<IpoptSolver> retval = new IpoptSolver(*this);
    6871    return GetRawPtr(retval);
    6972  }
     
    101104  IpoptSolver::OptimizeTNLP(const Ipopt::SmartPtr<Ipopt::TNLP> &tnlp)
    102105  {
     106#if 0
     107    printf("Global Time limit set to %g\n", time_limit_);
     108    double local_time_limit = time_limit_ -
     109                              CoinCpuTime() + start_time_;
     110    printf("Time limit set to %g\n", local_time_limit);
     111    if(local_time_limit <= 0.){
     112       optimizationStatus_ = Ipopt::Maximum_CpuTime_Exceeded;
     113       return solverReturnStatus(optimizationStatus_);
     114    }
     115#endif
    103116    TNLPSolver::ReturnStatus ret_status;
    104117    if (!zeroDimension(tnlp, ret_status)) {
     118#if 0
     119      if(time_limit_ < DBL_MAX){
     120           options_->SetNumericValue("max_cpu_time", local_time_limit,
     121                                  true, true);
     122      }
     123#endif
    105124      if (enable_warm_start_ && optimized_before_) {
    106125        optimizationStatus_ = app_->ReOptimizeTNLP(tnlp);
     
    130149  IpoptSolver::ReOptimizeTNLP(const Ipopt::SmartPtr<Ipopt::TNLP> &tnlp)
    131150  {
     151#if 0
     152    printf("Global Time limit set to %g\n", time_limit_);
     153    double local_time_limit = time_limit_ -
     154                              CoinCpuTime() + start_time_;
     155    printf("Time limit set to %g\n", local_time_limit);
     156    if(local_time_limit <= 0.){
     157       optimizationStatus_ = Ipopt::Maximum_CpuTime_Exceeded;
     158       return solverReturnStatus(optimizationStatus_);
     159    }
     160#endif
    132161    TNLPSolver::ReturnStatus ret_status;
    133162    if (!zeroDimension(tnlp, ret_status)) {
     163#if 0
     164      if(time_limit_ < DBL_MAX){
     165        options_->SetNumericValue("max_cpu_time",
     166                                  std::max(0., local_time_limit),
     167                                  true, true);
     168      }
     169#endif
    134170      if (optimized_before_) {
    135171        optimizationStatus_ = app_->ReOptimizeTNLP(tnlp);
     
    246282    case Ipopt::Diverging_Iterates:
    247283      return unbounded;
     284    case Ipopt::Maximum_CpuTime_Exceeded:
     285      return timeLimit;
    248286    default:
    249287      return exception;
  • trunk/Bonmin/src/Interfaces/Ipopt/BonIpoptSolver.hpp

    r1360 r1423  
    5555        const std::string & prefix);
    5656
     57    /// Copy constructor
     58    IpoptSolver(const IpoptSolver &other);
    5759
    5860    ///virtual copy constructor
  • trunk/Bonmin/test/InterfaceTest.cpp

    r1400 r1423  
    389389  interfaceTest(GetRawPtr(ipopt_solver));
    390390
    391 #ifdef COIN_HAS_FSQP
     391#ifdef COIN_HAS_FILTERSQP
    392392  Ipopt::SmartPtr<FilterSolver> filter_solver = new FilterSolver;
    393393  interfaceTest(GetRawPtr(filter_solver));
  • trunk/Externals

    r1408 r1423  
    66ThirdParty/FilterSQP https://projects.coin-or.org/svn/BuildTools/ThirdParty/FilterSQP/trunk
    77ThirdParty/Mumps https://projects.coin-or.org/svn/BuildTools/ThirdParty/Mumps/trunk
     8ThirdParty/Metis https://projects.coin-or.org/svn/BuildTools/ThirdParty/Metis/trunk
    89Data/Sample https://projects.coin-or.org/svn/Data/trunk/Sample
    910CoinUtils https://projects.coin-or.org/svn/CoinUtils/trunk/CoinUtils
  • trunk/configure

    r1343 r1423  
    480480ac_subdirs_all="$ac_subdirs_all ThirdParty/FilterSQP"
    481481ac_subdirs_all="$ac_subdirs_all ThirdParty/Mumps"
     482ac_subdirs_all="$ac_subdirs_all ThirdParty/Metis"
    482483ac_subdirs_all="$ac_subdirs_all CoinUtils"
    483484ac_subdirs_all="$ac_subdirs_all Data/Netlib"
     
    41754176
    41764177# Provide some information about the compiler.
    4177 echo "$as_me:4177:" \
     4178echo "$as_me:4178:" \
    41784179     "checking for Fortran 77 compiler version" >&5
    41794180ac_compiler=`set X $ac_compile; echo $2`
     
    64346435*-*-irix6*)
    64356436  # Find out which ABI we are using.
    6436   echo '#line 6436 "configure"' > conftest.$ac_ext
     6437  echo '#line 6437 "configure"' > conftest.$ac_ext
    64376438  if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
    64386439  (eval $ac_compile) 2>&5
     
    83988399   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    83998400   -e 's:$: $lt_compiler_flag:'`
    8400    (eval echo "\"\$as_me:8400: $lt_compile\"" >&5)
     8401   (eval echo "\"\$as_me:8401: $lt_compile\"" >&5)
    84018402   (eval "$lt_compile" 2>conftest.err)
    84028403   ac_status=$?
    84038404   cat conftest.err >&5
    8404    echo "$as_me:8404: \$? = $ac_status" >&5
     8405   echo "$as_me:8405: \$? = $ac_status" >&5
    84058406   if (exit $ac_status) && test -s "$ac_outfile"; then
    84068407     # The compiler can only warn and ignore the option if not recognized
     
    86668667   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    86678668   -e 's:$: $lt_compiler_flag:'`
    8668    (eval echo "\"\$as_me:8668: $lt_compile\"" >&5)
     8669   (eval echo "\"\$as_me:8669: $lt_compile\"" >&5)
    86698670   (eval "$lt_compile" 2>conftest.err)
    86708671   ac_status=$?
    86718672   cat conftest.err >&5
    8672    echo "$as_me:8672: \$? = $ac_status" >&5
     8673   echo "$as_me:8673: \$? = $ac_status" >&5
    86738674   if (exit $ac_status) && test -s "$ac_outfile"; then
    86748675     # The compiler can only warn and ignore the option if not recognized
     
    87708771   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    87718772   -e 's:$: $lt_compiler_flag:'`
    8772    (eval echo "\"\$as_me:8772: $lt_compile\"" >&5)
     8773   (eval echo "\"\$as_me:8773: $lt_compile\"" >&5)
    87738774   (eval "$lt_compile" 2>out/conftest.err)
    87748775   ac_status=$?
    87758776   cat out/conftest.err >&5
    8776    echo "$as_me:8776: \$? = $ac_status" >&5
     8777   echo "$as_me:8777: \$? = $ac_status" >&5
    87778778   if (exit $ac_status) && test -s out/conftest2.$ac_objext
    87788779   then
     
    1111511116  lt_status=$lt_dlunknown
    1111611117  cat > conftest.$ac_ext <<EOF
    11117 #line 11117 "configure"
     11118#line 11118 "configure"
    1111811119#include "confdefs.h"
    1111911120
     
    1121511216  lt_status=$lt_dlunknown
    1121611217  cat > conftest.$ac_ext <<EOF
    11217 #line 11217 "configure"
     11218#line 11218 "configure"
    1121811219#include "confdefs.h"
    1121911220
     
    1355913560   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    1356013561   -e 's:$: $lt_compiler_flag:'`
    13561    (eval echo "\"\$as_me:13561: $lt_compile\"" >&5)
     13562   (eval echo "\"\$as_me:13562: $lt_compile\"" >&5)
    1356213563   (eval "$lt_compile" 2>conftest.err)
    1356313564   ac_status=$?
    1356413565   cat conftest.err >&5
    13565    echo "$as_me:13565: \$? = $ac_status" >&5
     13566   echo "$as_me:13566: \$? = $ac_status" >&5
    1356613567   if (exit $ac_status) && test -s "$ac_outfile"; then
    1356713568     # The compiler can only warn and ignore the option if not recognized
     
    1366313664   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    1366413665   -e 's:$: $lt_compiler_flag:'`
    13665    (eval echo "\"\$as_me:13665: $lt_compile\"" >&5)
     13666   (eval echo "\"\$as_me:13666: $lt_compile\"" >&5)
    1366613667   (eval "$lt_compile" 2>out/conftest.err)
    1366713668   ac_status=$?
    1366813669   cat out/conftest.err >&5
    13669    echo "$as_me:13669: \$? = $ac_status" >&5
     13670   echo "$as_me:13670: \$? = $ac_status" >&5
    1367013671   if (exit $ac_status) && test -s out/conftest2.$ac_objext
    1367113672   then
     
    1523315234   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    1523415235   -e 's:$: $lt_compiler_flag:'`
    15235    (eval echo "\"\$as_me:15235: $lt_compile\"" >&5)
     15236   (eval echo "\"\$as_me:15236: $lt_compile\"" >&5)
    1523615237   (eval "$lt_compile" 2>conftest.err)
    1523715238   ac_status=$?
    1523815239   cat conftest.err >&5
    15239    echo "$as_me:15239: \$? = $ac_status" >&5
     15240   echo "$as_me:15240: \$? = $ac_status" >&5
    1524015241   if (exit $ac_status) && test -s "$ac_outfile"; then
    1524115242     # The compiler can only warn and ignore the option if not recognized
     
    1533715338   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    1533815339   -e 's:$: $lt_compiler_flag:'`
    15339    (eval echo "\"\$as_me:15339: $lt_compile\"" >&5)
     15340   (eval echo "\"\$as_me:15340: $lt_compile\"" >&5)
    1534015341   (eval "$lt_compile" 2>out/conftest.err)
    1534115342   ac_status=$?
    1534215343   cat out/conftest.err >&5
    15343    echo "$as_me:15343: \$? = $ac_status" >&5
     15344   echo "$as_me:15344: \$? = $ac_status" >&5
    1534415345   if (exit $ac_status) && test -s out/conftest2.$ac_objext
    1534515346   then
     
    1754417545   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    1754517546   -e 's:$: $lt_compiler_flag:'`
    17546    (eval echo "\"\$as_me:17546: $lt_compile\"" >&5)
     17547   (eval echo "\"\$as_me:17547: $lt_compile\"" >&5)
    1754717548   (eval "$lt_compile" 2>conftest.err)
    1754817549   ac_status=$?
    1754917550   cat conftest.err >&5
    17550    echo "$as_me:17550: \$? = $ac_status" >&5
     17551   echo "$as_me:17551: \$? = $ac_status" >&5
    1755117552   if (exit $ac_status) && test -s "$ac_outfile"; then
    1755217553     # The compiler can only warn and ignore the option if not recognized
     
    1781217813   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    1781317814   -e 's:$: $lt_compiler_flag:'`
    17814    (eval echo "\"\$as_me:17814: $lt_compile\"" >&5)
     17815   (eval echo "\"\$as_me:17815: $lt_compile\"" >&5)
    1781517816   (eval "$lt_compile" 2>conftest.err)
    1781617817   ac_status=$?
    1781717818   cat conftest.err >&5
    17818    echo "$as_me:17818: \$? = $ac_status" >&5
     17819   echo "$as_me:17819: \$? = $ac_status" >&5
    1781917820   if (exit $ac_status) && test -s "$ac_outfile"; then
    1782017821     # The compiler can only warn and ignore the option if not recognized
     
    1791617917   -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
    1791717918   -e 's:$: $lt_compiler_flag:'`
    17918    (eval echo "\"\$as_me:17918: $lt_compile\"" >&5)
     17919   (eval echo "\"\$as_me:17919: $lt_compile\"" >&5)
    1791917920   (eval "$lt_compile" 2>out/conftest.err)
    1792017921   ac_status=$?
    1792117922   cat out/conftest.err >&5
    17922    echo "$as_me:17922: \$? = $ac_status" >&5
     17923   echo "$as_me:17923: \$? = $ac_status" >&5
    1792317924   if (exit $ac_status) && test -s out/conftest2.$ac_objext
    1792417925   then
     
    2101521016fi
    2101621017
     21018echo "$as_me:$LINENO: checking whether code for third party package Metis is available" >&5
     21019echo $ECHO_N "checking whether code for third party package Metis is available... $ECHO_C" >&6
     21020coin_skip=no
     21021if test x"$COIN_SKIP_PROJECTS" != x; then
     21022  for dir in $COIN_SKIP_PROJECTS; do
     21023    if test $dir = ThirdParty/Metis; then
     21024      coin_skip=yes
     21025    fi
     21026  done
     21027fi
     21028if test $coin_skip = yes; then
     21029  echo "$as_me:$LINENO: result: skipping" >&5
     21030echo "${ECHO_T}skipping" >&6
     21031else
     21032  coin_tmp=`echo $srcdir/ThirdParty/Metis/metis-4.0/Lib/balance.c`
     21033  # There is probably a more elegant way to get the first thing out here...
     21034  for i in $coin_tmp; do
     21035    coin_tmp2=$i
     21036    #break 1
     21037  done
     21038  if test -r $coin_tmp2; then
     21039    coin_subdirs="$coin_subdirs ThirdParty/Metis"
     21040    echo "$as_me:$LINENO: result: yes" >&5
     21041echo "${ECHO_T}yes" >&6
     21042
     21043
     21044subdirs="$subdirs ThirdParty/Metis"
     21045
     21046  else
     21047    echo "$as_me:$LINENO: result: no" >&5
     21048echo "${ECHO_T}no" >&6
     21049  fi
     21050fi
    2101721051
    2101821052#############################################################################
  • trunk/configure.ac

    r433 r1423  
    4949AC_COIN_THIRDPARTY_SUBDIRS([FilterSQP],[ThirdParty/FilterSQP],[source/src/filter.f])
    5050AC_COIN_THIRDPARTY_SUBDIRS([Mumps],[ThirdParty/Mumps],[MUMPS/src/dmumps_part1.F])
    51 
     51AC_COIN_THIRDPARTY_SUBDIRS([Metis],[ThirdParty/Metis],[metis-4.0/Lib/balance.c])
    5252#############################################################################
    5353#                  Check which subprojects are there                        #
Note: See TracChangeset for help on using the changeset viewer.