Commit 01eee273 authored by David Bommes's avatar David Bommes
Browse files

added dependency checks such that

gmm++ and eigen3 librarires are sufficient to compile

git-svn-id: http://www.openflipper.org/svnrepo/CoMISo/trunk@172 1355f012-dd97-4b2f-ae87-10fa9f823a57
parent d946c11a
...@@ -207,7 +207,7 @@ if (CPLEX_FOUND ) ...@@ -207,7 +207,7 @@ if (CPLEX_FOUND )
add_definitions(-DIL_STD) add_definitions(-DIL_STD)
else () else ()
message (STATUS "CPLEX not found!") message (STATUS "CPLEX not found!")
set (COMISO_ARPACK_CONFIG_FILE_SETTINGS "#define COMISO_CPLEX_AVAILABLE 0" ) set (COMISO_CPLEX_CONFIG_FILE_SETTINGS "#define COMISO_CPLEX_AVAILABLE 0" )
endif () endif ()
include_directories ( include_directories (
......
...@@ -10,6 +10,9 @@ ...@@ -10,6 +10,9 @@
#include "ArpackSolver.hh" #include "ArpackSolver.hh"
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#if (COMISO_ARPACK_AVAILABLE && COMISO_SUITESPARSE_AVAILABLE && COMISO_Eigen3_AVAILABLE)
//== NAMESPACES =============================================================== //== NAMESPACES ===============================================================
namespace COMISO { namespace COMISO {
...@@ -26,7 +29,6 @@ solve(const MatrixT& _A, ...@@ -26,7 +29,6 @@ solve(const MatrixT& _A,
const int _n_eigvalues, const int _n_eigvalues,
const char* _which_eigs ) const char* _which_eigs )
{ {
#if COMISO_ARPACK_AVAILABLE
Matrix A(_A); Matrix A(_A);
// ARSymStdEig<double, Matrix> eig_prob(A.matrix().cols(), _n_eigvalues, &A, &Matrix::mult_Mv, (char*)_which_eigs, // ARSymStdEig<double, Matrix> eig_prob(A.matrix().cols(), _n_eigvalues, &A, &Matrix::mult_Mv, (char*)_which_eigs,
// 0, 0.0, 2000); // 0, 0.0, 2000);
...@@ -46,7 +48,6 @@ solve(const MatrixT& _A, ...@@ -46,7 +48,6 @@ solve(const MatrixT& _A,
for(int j = 0; j<A.matrix().rows(); ++j) for(int j = 0; j<A.matrix().rows(); ++j)
_eigenvectors.coeffRef(j,i) = eig_prob.RawEigenvector(i)[j]; _eigenvectors.coeffRef(j,i) = eig_prob.RawEigenvector(i)[j];
} }
#endif
} }
...@@ -62,7 +63,6 @@ solve_inverse(const MatrixT& _A, ...@@ -62,7 +63,6 @@ solve_inverse(const MatrixT& _A,
const int _n_eigvalues, const int _n_eigvalues,
const char* _which_eigs) const char* _which_eigs)
{ {
#if COMISO_ARPACK_AVAILABLE
Matrix A(_A,true); Matrix A(_A,true);
ARSymStdEig<double, Matrix> eig_prob(A.matrix().cols(), _n_eigvalues, &A, &Matrix::mult_M_inv_v, (char*)_which_eigs, ARSymStdEig<double, Matrix> eig_prob(A.matrix().cols(), _n_eigvalues, &A, &Matrix::mult_M_inv_v, (char*)_which_eigs,
0, 0.0, 2000); 0, 0.0, 2000);
...@@ -84,7 +84,6 @@ solve_inverse(const MatrixT& _A, ...@@ -84,7 +84,6 @@ solve_inverse(const MatrixT& _A,
for(int j = 0; j<A.matrix().rows(); ++j) for(int j = 0; j<A.matrix().rows(); ++j)
_eigenvectors.coeffRef(j,i) = eig_prob.RawEigenvector(i)[j]; _eigenvectors.coeffRef(j,i) = eig_prob.RawEigenvector(i)[j];
} }
#endif
} }
...@@ -126,3 +125,7 @@ check_result(const MatrixT& _A, std::vector<double>& _eigenvalues, MatrixT2& _ei ...@@ -126,3 +125,7 @@ check_result(const MatrixT& _A, std::vector<double>& _eigenvalues, MatrixT2& _ei
//============================================================================= //=============================================================================
} // namespace COMISO } // namespace COMISO
//============================================================================= //=============================================================================
//=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
\ No newline at end of file
...@@ -8,9 +8,9 @@ ...@@ -8,9 +8,9 @@
#ifndef COMISO_ARPACKSOLVER_HH #ifndef COMISO_ARPACKSOLVER_HH
#define COMISO_ARPACKSOLVER_HH #define COMISO_ARPACKSOLVER_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ======================================== //== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh> #include <CoMISo/Config/config.hh>
#if (COMISO_ARPACK_AVAILABLE && COMISO_SUITESPARSE_AVAILABLE && COMISO_Eigen3_AVAILABLE)
//== INCLUDES ================================================================= //== INCLUDES =================================================================
#include <CoMISo/Config/CoMISoDefines.hh> #include <CoMISo/Config/CoMISoDefines.hh>
...@@ -18,9 +18,7 @@ ...@@ -18,9 +18,7 @@
#include <Eigen/Eigen> #include <Eigen/Eigen>
#include "EigenArpackMatrixT.hh" #include "EigenArpackMatrixT.hh"
#if COMISO_ARPACK_AVAILABLE #include <arpack++/arssym.h>
#include <arpack++/arssym.h>
#endif
//== FORWARDDECLARATIONS ====================================================== //== FORWARDDECLARATIONS ======================================================
...@@ -44,10 +42,11 @@ namespace COMISO { ...@@ -44,10 +42,11 @@ namespace COMISO {
class COMISODLLEXPORT ArpackSolver class COMISODLLEXPORT ArpackSolver
{ {
public: public:
// sparse matrix type // sparse matrix type
typedef EigenArpackMatrixT<double,Eigen::SparseMatrix<double,Eigen::ColMajor> > Matrix; typedef EigenArpackMatrixT<double,Eigen::SparseMatrix<double,Eigen::ColMajor> > Matrix;
/// Constructor /// Constructor
ArpackSolver() {} ArpackSolver() {}
...@@ -92,6 +91,8 @@ private: ...@@ -92,6 +91,8 @@ private:
#include "ArpackSolver.cc" #include "ArpackSolver.cc"
#endif #endif
//============================================================================= //=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
#endif // ACG_ARPACKSOLVER_HH defined #endif // ACG_ARPACKSOLVER_HH defined
//============================================================================= //=============================================================================
...@@ -6,6 +6,12 @@ ...@@ -6,6 +6,12 @@
#define COMISO_EIGENARPACKMATRIXT_C #define COMISO_EIGENARPACKMATRIXT_C
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
//== INCLUDES ================================================================= //== INCLUDES =================================================================
#include "EigenArpackMatrixT.hh" #include "EigenArpackMatrixT.hh"
...@@ -25,3 +31,5 @@ namespace COMISO { ...@@ -25,3 +31,5 @@ namespace COMISO {
//============================================================================= //=============================================================================
} // namespace ACG } // namespace ACG
//============================================================================= //=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
...@@ -8,6 +8,11 @@ ...@@ -8,6 +8,11 @@
#ifndef COMISO_EIGENARPACKMATRIXT_HH #ifndef COMISO_EIGENARPACKMATRIXT_HH
#define COMISO_EIGENARPACKMATRIXT_HH #define COMISO_EIGENARPACKMATRIXT_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if (COMISO_SUITESPARSE_AVAILABLE && COMISO_Eigen3_AVAILABLE)
//=============================================================================
//== INCLUDES ================================================================= //== INCLUDES =================================================================
...@@ -114,6 +119,8 @@ private: ...@@ -114,6 +119,8 @@ private:
#include "EigenArpackMatrixT.cc" #include "EigenArpackMatrixT.cc"
#endif #endif
//============================================================================= //=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
#endif // COMISO_EIGENARPACKMATRIXT_HH defined #endif // COMISO_EIGENARPACKMATRIXT_HH defined
//============================================================================= //=============================================================================
...@@ -22,7 +22,13 @@ ...@@ -22,7 +22,13 @@
* * * *
\*===========================================================================*/ \*===========================================================================*/
#include <iostream>
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh> #include <CoMISo/Config/config.hh>
#if (COMISO_ARPACK_AVAILABLE && COMISO_SUITESPARSE_AVAILABLE && COMISO_Eigen3_AVAILABLE)
//=============================================================================
#include <CoMISo/Utils/StopWatch.hh> #include <CoMISo/Utils/StopWatch.hh>
#include <vector> #include <vector>
...@@ -86,3 +92,16 @@ int main(void) ...@@ -86,3 +92,16 @@ int main(void)
return 0; return 0;
} }
//=============================================================================
#else
//=============================================================================
// Example main
int main(void)
{
std::cerr << "Info: required dependencies are missing, abort...\n";
return 0;
}
//=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
...@@ -8,14 +8,20 @@ ...@@ -8,14 +8,20 @@
#ifndef COMISO_NCONSTRAINTINTERFACE_HH #ifndef COMISO_NCONSTRAINTINTERFACE_HH
#define COMISO_NCONSTRAINTINTERFACE_HH #define COMISO_NCONSTRAINTINTERFACE_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_Eigen3_AVAILABLE
//== INCLUDES ================================================================= //== INCLUDES =================================================================
#include <CoMISo/Config/CoMISoDefines.hh> #include <CoMISo/Config/CoMISoDefines.hh>
#include "SuperSparseMatrixT.hh" #include "SuperSparseMatrixT.hh"
#define EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET #define EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET
#include <Eigen/Sparse> #include <Eigen/Sparse>
//== FORWARDDECLARATIONS ====================================================== //== FORWARDDECLARATIONS ======================================================
//== NAMESPACES =============================================================== //== NAMESPACES ===============================================================
...@@ -97,6 +103,8 @@ private: ...@@ -97,6 +103,8 @@ private:
//============================================================================= //=============================================================================
} // namespace COMISO } // namespace COMISO
//============================================================================= //=============================================================================
#endif // COMISO_Eigen3_AVAILABLE
//=============================================================================
#endif // ACG_NCONSTRAINTINTERFACE_HH defined #endif // ACG_NCONSTRAINTINTERFACE_HH defined
//============================================================================= //=============================================================================
...@@ -9,8 +9,13 @@ ...@@ -9,8 +9,13 @@
#define COMISO_NPROBLEMINTERFACE_HH #define COMISO_NPROBLEMINTERFACE_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_Eigen3_AVAILABLE
//== INCLUDES ================================================================= //== INCLUDES =================================================================
#include <Eigen/Eigen> #include <Eigen/Eigen>
#if !(EIGEN_VERSION_AT_LEAST(3,1,0)) #if !(EIGEN_VERSION_AT_LEAST(3,1,0))
#define EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET #define EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET
...@@ -38,13 +43,13 @@ namespace COMISO { ...@@ -38,13 +43,13 @@ namespace COMISO {
class COMISODLLEXPORT NProblemInterface class COMISODLLEXPORT NProblemInterface
{ {
public: public:
// Sparse Matrix Type // Sparse Matrix Type
#if EIGEN_VERSION_AT_LEAST(3,1,0) #if EIGEN_VERSION_AT_LEAST(3,1,0)
typedef Eigen::SparseMatrix<double,Eigen::ColMajor> SMatrixNP; typedef Eigen::SparseMatrix<double,Eigen::ColMajor> SMatrixNP;
#else #else
typedef Eigen::DynamicSparseMatrix<double,Eigen::ColMajor> SMatrixNP; typedef Eigen::DynamicSparseMatrix<double,Eigen::ColMajor> SMatrixNP;
#endif #endif
/// Default constructor /// Default constructor
NProblemInterface(); NProblemInterface();
...@@ -69,6 +74,8 @@ public: ...@@ -69,6 +74,8 @@ public:
//============================================================================= //=============================================================================
} // namespace COMISO } // namespace COMISO
//============================================================================= //=============================================================================
#endif // COMISO_Eigen3_AVAILABLE
//=============================================================================
#endif // COMISO_NPROBLEMGMMINTERFACE_HH defined #endif // COMISO_NPROBLEMGMMINTERFACE_HH defined
//============================================================================= //=============================================================================
...@@ -21,6 +21,8 @@ int ...@@ -21,6 +21,8 @@ int
NewtonSolver:: NewtonSolver::
solve(NProblemGmmInterface* _problem) solve(NProblemGmmInterface* _problem)
{ {
#if COMISO_SUITESPARSE_AVAILABLE
// get problem size // get problem size
int n = _problem->n_unknowns(); int n = _problem->n_unknowns();
...@@ -99,11 +101,15 @@ solve(NProblemGmmInterface* _problem) ...@@ -99,11 +101,15 @@ solve(NProblemGmmInterface* _problem)
} }
} }
} }
_problem->store_result(P(x)); _problem->store_result(P(x));
std::cerr << "Newton Solver did not converge!!! after " std::cerr << "Newton Solver did not converge!!! after "
<< max_iter_ << " iterations." << std::endl; << max_iter_ << " iterations." << std::endl;
return false; return false;
#else
std::cerr << "Warning: NewtonSolver requires not-available CholmodSolver...\n";
return false;
#endif
} }
...@@ -111,8 +117,6 @@ solve(NProblemGmmInterface* _problem) ...@@ -111,8 +117,6 @@ solve(NProblemGmmInterface* _problem)
//============================================================================= //=============================================================================
} // namespace COMISO } // namespace COMISO
//============================================================================= //=============================================================================
...@@ -8,6 +8,8 @@ ...@@ -8,6 +8,8 @@
#ifndef COMISO_NEWTONSOLVER_HH #ifndef COMISO_NEWTONSOLVER_HH
#define COMISO_NEWTONSOLVER_HH #define COMISO_NEWTONSOLVER_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
//== INCLUDES ================================================================= //== INCLUDES =================================================================
......
...@@ -22,7 +22,10 @@ ...@@ -22,7 +22,10 @@
* * * *
\*===========================================================================*/ \*===========================================================================*/
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
#include "CholmodSolver.hh" #include "CholmodSolver.hh"
...@@ -253,3 +256,7 @@ show_timings() ...@@ -253,3 +256,7 @@ show_timings()
} }
//=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
...@@ -32,6 +32,9 @@ ...@@ -32,6 +32,9 @@
#ifndef COMISO_CHOLMOD_SOLVER_HH #ifndef COMISO_CHOLMOD_SOLVER_HH
#define COMISO_CHOLMOD_SOLVER_HH #define COMISO_CHOLMOD_SOLVER_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_SUITESPARSE_AVAILABLE
//== INCLUDES ================================================================= //== INCLUDES =================================================================
...@@ -115,5 +118,7 @@ private: ...@@ -115,5 +118,7 @@ private:
#include "CholmodSolverT.cc" #include "CholmodSolverT.cc"
#endif #endif
//============================================================================= //=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
#endif // COMISO_CHOLMOD_SOLVER_HH defined #endif // COMISO_CHOLMOD_SOLVER_HH defined
//============================================================================= //=============================================================================
...@@ -23,6 +23,11 @@ ...@@ -23,6 +23,11 @@
\*===========================================================================*/ \*===========================================================================*/
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
#define COMISO_CHOLMOD_SOLVER_TEMPLATES_C #define COMISO_CHOLMOD_SOLVER_TEMPLATES_C
...@@ -86,11 +91,13 @@ bool CholmodSolver::calc_system_eigen( const Eigen_MatrixT& _mat) ...@@ -86,11 +91,13 @@ bool CholmodSolver::calc_system_eigen( const Eigen_MatrixT& _mat)
{ {
if(show_timings_) sw_.start(); if(show_timings_) sw_.start();
#if COMISO_Eigen3_AVAILABLE
COMISO_EIGEN::get_ccs_symmetric_data( _mat, COMISO_EIGEN::get_ccs_symmetric_data( _mat,
'u', 'u',
values_, values_,
rowind_, rowind_,
colptr_ ); colptr_ );
#endif
if(show_timings_) if(show_timings_)
{ {
...@@ -106,15 +113,19 @@ bool CholmodSolver::calc_system_eigen( const Eigen_MatrixT& _mat) ...@@ -106,15 +113,19 @@ bool CholmodSolver::calc_system_eigen( const Eigen_MatrixT& _mat)
template< class Eigen_MatrixT> template< class Eigen_MatrixT>
bool CholmodSolver::update_system_eigen( const Eigen_MatrixT& _mat) bool CholmodSolver::update_system_eigen( const Eigen_MatrixT& _mat)
{ {
#if COMISO_Eigen3_AVAILABLE
COMISO_EIGEN::get_ccs_symmetric_data( _mat, COMISO_EIGEN::get_ccs_symmetric_data( _mat,
'u', 'u',
values_, values_,
rowind_, rowind_,
colptr_ ); colptr_ );
#endif
return update_system( colptr_, rowind_, values_); return update_system( colptr_, rowind_, values_);
} }
} }
//=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
...@@ -26,6 +26,9 @@ ...@@ -26,6 +26,9 @@
#include "EigenLDLTSolver.hh" #include "EigenLDLTSolver.hh"
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#if (COMISO_Eigen3_AVAILABLE)
//== INCLUDES =================================================================
namespace COMISO { namespace COMISO {
...@@ -108,3 +111,7 @@ show_timings() ...@@ -108,3 +111,7 @@ show_timings()
} }
//=============================================================================
#endif // COMISO_Eigen3_AVAILABLE
//=============================================================================
\ No newline at end of file
...@@ -33,6 +33,9 @@ ...@@ -33,6 +33,9 @@
#define COMISO_EIGEN_LDLT_SOLVER_HH #define COMISO_EIGEN_LDLT_SOLVER_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if (COMISO_Eigen3_AVAILABLE)
//== INCLUDES ================================================================= //== INCLUDES =================================================================
...@@ -42,12 +45,12 @@ ...@@ -42,12 +45,12 @@
#include <iostream> #include <iostream>
#include <vector> #include <vector>
#include <Eigen/Eigen> #include <Eigen/Eigen>
#include <Eigen/Sparse> #include <Eigen/Sparse>
#include <Eigen/SparseCholesky> #include <Eigen/SparseCholesky>
//== NAMESPACES =============================================================== //== NAMESPACES ===============================================================
namespace COMISO { namespace COMISO {
...@@ -112,5 +115,7 @@ private: ...@@ -112,5 +115,7 @@ private:
#include "EigenLDLTSolverT.cc" #include "EigenLDLTSolverT.cc"
#endif #endif
//============================================================================= //=============================================================================
#endif // COMISO_Eigen3_AVAILABLE
//=============================================================================
#endif // COMISO_EIGEN_LDLT_SOLVER_HH defined #endif // COMISO_EIGEN_LDLT_SOLVER_HH defined
//============================================================================= //=============================================================================
...@@ -22,7 +22,10 @@ ...@@ -22,7 +22,10 @@
* * * *
\*===========================================================================*/ \*===========================================================================*/