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

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 )
add_definitions(-DIL_STD)
else ()
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 ()
include_directories (
......
......@@ -10,6 +10,9 @@
#include "ArpackSolver.hh"
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#if (COMISO_ARPACK_AVAILABLE && COMISO_SUITESPARSE_AVAILABLE && COMISO_Eigen3_AVAILABLE)
//== NAMESPACES ===============================================================
namespace COMISO {
......@@ -26,7 +29,6 @@ solve(const MatrixT& _A,
const int _n_eigvalues,
const char* _which_eigs )
{
#if COMISO_ARPACK_AVAILABLE
Matrix A(_A);
// ARSymStdEig<double, Matrix> eig_prob(A.matrix().cols(), _n_eigvalues, &A, &Matrix::mult_Mv, (char*)_which_eigs,
// 0, 0.0, 2000);
......@@ -46,7 +48,6 @@ solve(const MatrixT& _A,
for(int j = 0; j<A.matrix().rows(); ++j)
_eigenvectors.coeffRef(j,i) = eig_prob.RawEigenvector(i)[j];
}
#endif
}
......@@ -62,7 +63,6 @@ solve_inverse(const MatrixT& _A,
const int _n_eigvalues,
const char* _which_eigs)
{
#if COMISO_ARPACK_AVAILABLE
Matrix A(_A,true);
ARSymStdEig<double, Matrix> eig_prob(A.matrix().cols(), _n_eigvalues, &A, &Matrix::mult_M_inv_v, (char*)_which_eigs,
0, 0.0, 2000);
......@@ -84,7 +84,6 @@ solve_inverse(const MatrixT& _A,
for(int j = 0; j<A.matrix().rows(); ++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
//=============================================================================
} // namespace COMISO
//=============================================================================
//=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
\ No newline at end of file
......@@ -8,9 +8,9 @@
#ifndef COMISO_ARPACKSOLVER_HH
#define COMISO_ARPACKSOLVER_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if (COMISO_ARPACK_AVAILABLE && COMISO_SUITESPARSE_AVAILABLE && COMISO_Eigen3_AVAILABLE)
//== INCLUDES =================================================================
#include <CoMISo/Config/CoMISoDefines.hh>
......@@ -18,9 +18,7 @@
#include <Eigen/Eigen>
#include "EigenArpackMatrixT.hh"
#if COMISO_ARPACK_AVAILABLE
#include <arpack++/arssym.h>
#endif
#include <arpack++/arssym.h>
//== FORWARDDECLARATIONS ======================================================
......@@ -44,10 +42,11 @@ namespace COMISO {
class COMISODLLEXPORT ArpackSolver
{
public:
// sparse matrix type
typedef EigenArpackMatrixT<double,Eigen::SparseMatrix<double,Eigen::ColMajor> > Matrix;
/// Constructor
ArpackSolver() {}
......@@ -92,6 +91,8 @@ private:
#include "ArpackSolver.cc"
#endif
//=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
#endif // ACG_ARPACKSOLVER_HH defined
//=============================================================================
......@@ -6,6 +6,12 @@
#define COMISO_EIGENARPACKMATRIXT_C
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
//== INCLUDES =================================================================
#include "EigenArpackMatrixT.hh"
......@@ -25,3 +31,5 @@ namespace COMISO {
//=============================================================================
} // namespace ACG
//=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
......@@ -8,6 +8,11 @@
#ifndef COMISO_EIGENARPACKMATRIXT_HH
#define COMISO_EIGENARPACKMATRIXT_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if (COMISO_SUITESPARSE_AVAILABLE && COMISO_Eigen3_AVAILABLE)
//=============================================================================
//== INCLUDES =================================================================
......@@ -114,6 +119,8 @@ private:
#include "EigenArpackMatrixT.cc"
#endif
//=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
#endif // COMISO_EIGENARPACKMATRIXT_HH defined
//=============================================================================
......@@ -22,7 +22,13 @@
* *
\*===========================================================================*/
#include <iostream>
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if (COMISO_ARPACK_AVAILABLE && COMISO_SUITESPARSE_AVAILABLE && COMISO_Eigen3_AVAILABLE)
//=============================================================================
#include <CoMISo/Utils/StopWatch.hh>
#include <vector>
......@@ -86,3 +92,16 @@ int main(void)
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 @@
#ifndef COMISO_NCONSTRAINTINTERFACE_HH
#define COMISO_NCONSTRAINTINTERFACE_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_Eigen3_AVAILABLE
//== INCLUDES =================================================================
#include <CoMISo/Config/CoMISoDefines.hh>
#include "SuperSparseMatrixT.hh"
#define EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET
#include <Eigen/Sparse>
//== FORWARDDECLARATIONS ======================================================
//== NAMESPACES ===============================================================
......@@ -97,6 +103,8 @@ private:
//=============================================================================
} // namespace COMISO
//=============================================================================
#endif // COMISO_Eigen3_AVAILABLE
//=============================================================================
#endif // ACG_NCONSTRAINTINTERFACE_HH defined
//=============================================================================
......@@ -9,8 +9,13 @@
#define COMISO_NPROBLEMINTERFACE_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_Eigen3_AVAILABLE
//== INCLUDES =================================================================
#include <Eigen/Eigen>
#if !(EIGEN_VERSION_AT_LEAST(3,1,0))
#define EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET
......@@ -38,13 +43,13 @@ namespace COMISO {
class COMISODLLEXPORT NProblemInterface
{
public:
// 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;
#else
#else
typedef Eigen::DynamicSparseMatrix<double,Eigen::ColMajor> SMatrixNP;
#endif
#endif
/// Default constructor
NProblemInterface();
......@@ -69,6 +74,8 @@ public:
//=============================================================================
} // namespace COMISO
//=============================================================================
#endif // COMISO_Eigen3_AVAILABLE
//=============================================================================
#endif // COMISO_NPROBLEMGMMINTERFACE_HH defined
//=============================================================================
......@@ -21,6 +21,8 @@ int
NewtonSolver::
solve(NProblemGmmInterface* _problem)
{
#if COMISO_SUITESPARSE_AVAILABLE
// get problem size
int n = _problem->n_unknowns();
......@@ -99,11 +101,15 @@ solve(NProblemGmmInterface* _problem)
}
}
}
_problem->store_result(P(x));
std::cerr << "Newton Solver did not converge!!! after "
<< max_iter_ << " iterations." << std::endl;
return false;
#else
std::cerr << "Warning: NewtonSolver requires not-available CholmodSolver...\n";
return false;
#endif
}
......@@ -111,8 +117,6 @@ solve(NProblemGmmInterface* _problem)
//=============================================================================
} // namespace COMISO
//=============================================================================
......@@ -8,6 +8,8 @@
#ifndef COMISO_NEWTONSOLVER_HH
#define COMISO_NEWTONSOLVER_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
//== INCLUDES =================================================================
......
......@@ -22,7 +22,10 @@
* *
\*===========================================================================*/
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
#include "CholmodSolver.hh"
......@@ -253,3 +256,7 @@ show_timings()
}
//=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
......@@ -32,6 +32,9 @@
#ifndef COMISO_CHOLMOD_SOLVER_HH
#define COMISO_CHOLMOD_SOLVER_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_SUITESPARSE_AVAILABLE
//== INCLUDES =================================================================
......@@ -115,5 +118,7 @@ private:
#include "CholmodSolverT.cc"
#endif
//=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
#endif // COMISO_CHOLMOD_SOLVER_HH defined
//=============================================================================
......@@ -23,6 +23,11 @@
\*===========================================================================*/
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
#define COMISO_CHOLMOD_SOLVER_TEMPLATES_C
......@@ -86,11 +91,13 @@ bool CholmodSolver::calc_system_eigen( const Eigen_MatrixT& _mat)
{
if(show_timings_) sw_.start();
#if COMISO_Eigen3_AVAILABLE
COMISO_EIGEN::get_ccs_symmetric_data( _mat,
'u',
values_,
rowind_,
colptr_ );
#endif
if(show_timings_)
{
......@@ -106,15 +113,19 @@ bool CholmodSolver::calc_system_eigen( const Eigen_MatrixT& _mat)
template< class Eigen_MatrixT>
bool CholmodSolver::update_system_eigen( const Eigen_MatrixT& _mat)
{
#if COMISO_Eigen3_AVAILABLE
COMISO_EIGEN::get_ccs_symmetric_data( _mat,
'u',
values_,
rowind_,
colptr_ );
#endif
return update_system( colptr_, rowind_, values_);
}
}
//=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
......@@ -26,6 +26,9 @@
#include "EigenLDLTSolver.hh"
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#if (COMISO_Eigen3_AVAILABLE)
//== INCLUDES =================================================================
namespace COMISO {
......@@ -108,3 +111,7 @@ show_timings()
}
//=============================================================================
#endif // COMISO_Eigen3_AVAILABLE
//=============================================================================
\ No newline at end of file
......@@ -33,6 +33,9 @@
#define COMISO_EIGEN_LDLT_SOLVER_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if (COMISO_Eigen3_AVAILABLE)
//== INCLUDES =================================================================
......@@ -42,12 +45,12 @@
#include <iostream>
#include <vector>
#include <Eigen/Eigen>
#include <Eigen/Sparse>
#include <Eigen/SparseCholesky>
//== NAMESPACES ===============================================================
namespace COMISO {
......@@ -112,5 +115,7 @@ private:
#include "EigenLDLTSolverT.cc"
#endif
//=============================================================================
#endif // COMISO_Eigen3_AVAILABLE
//=============================================================================
#endif // COMISO_EIGEN_LDLT_SOLVER_HH defined
//=============================================================================
......@@ -22,7 +22,10 @@
* *
\*===========================================================================*/
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if (COMISO_Eigen3_AVAILABLE)
//== INCLUDES =================================================================
#define COMISO_EIGEN_LDLT_SOLVER_TEMPLATES_C
......@@ -110,3 +113,7 @@ bool EigenLDLTSolver::update_system_eigen( const Eigen_MatrixT& _mat)
}
//=============================================================================
#endif // COMISO_Eigen3_AVAILABLE
//=============================================================================
......@@ -30,6 +30,11 @@
//
//=============================================================================
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_Eigen3_AVAILABLE
#define COMISO_Eigen_TOOLS_C
//== INCLUDES =================================================================
......@@ -38,6 +43,7 @@
#include <queue>
#include <CoMISo/Utils/StopWatch.hh>
#include <CoMISo/Utils/VSToolsT.hh>
#include <gmm/gmm.h>
//== NAMESPACES ===============================================================
......@@ -327,7 +333,7 @@ void permute( const Eigen_MatrixT& _QR, const std::vector< IntT>& _Pvec, Eigen_M
//-----------------------------------------------------------------------------
#ifndef COMISO_NCHOLMOD
#if COMISO_SUITESPARSE_AVAILABLE
/// Eigen to Cholmod_sparse interface
template<class MatrixT>
......@@ -489,6 +495,7 @@ void eigen_to_cholmod( const MatrixT& _A, cholmod_sparse* &_AC, cholmod_common*
}
}
#endif
/*
/// Eigen to Cholmod_dense interface
......@@ -668,9 +675,10 @@ void gmm_to_eigen( const GMM_MatrixT& _G, EIGEN_MatrixT& _E)
#endif
}
#endif
//=============================================================================
} // namespace COMISO
//=============================================================================
//=============================================================================
#endif // COMISO_Eigen3_AVAILABLE
//=============================================================================
\ No newline at end of file
......@@ -27,6 +27,10 @@
#define COMISO_Eigen_TOOLS_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_Eigen3_AVAILABLE
//== INCLUDES =================================================================
#include <iostream>
......@@ -35,13 +39,12 @@
#include <limits>
#include <cmath>
#ifdef COMISO_Eigen3_AVAILABLE
#include <Eigen/Dense>
#define EIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET
#include <Eigen/Sparse>
#endif
#ifndef COMISO_NCHOLMOD
#if COMISO_SUITESPARSE_AVAILABLE
#include <cholmod.h>
#endif
......@@ -91,7 +94,7 @@ template< class Eigen_MatrixT, class IntT >
void permute( const Eigen_MatrixT& _QR, const std::vector< IntT>& _Pvec, Eigen_MatrixT& _A);
#ifndef COMISO_NCHOLMOD
#if COMISO_SUITESPARSE_AVAILABLE
/// Eigen to Cholmod_sparse interface
template<class MatrixT>
......@@ -117,7 +120,10 @@ void gmm_to_eigen( const GMM_MatrixT& _G, EIGEN_MatrixT& _E);
#define COMISO_Eigen_TOOLS_TEMPLATES
#include "Eigen_Tools.cc"
#endif
//=============================================================================
#endif // COMISO_Eigen3_AVAILABLE
//=============================================================================//=============================================================================
#endif // Eigen_TOOLS_HH defined
//=============================================================================
......@@ -1104,7 +1104,7 @@ void print_dense( const MatrixT& _A)
//-----------------------------------------------------------------------------
#ifndef COMISO_NCHOLMOD
#if COMISO_SUITESPARSE_AVAILABLE
/// GMM to Cholmod_sparse interface
template<class MatrixT>
......
......@@ -34,7 +34,7 @@
#include <algorithm>
#include <gmm/gmm.h>
#ifndef COMISO_NCHOLMOD
#if COMISO_SUITESPARSE_AVAILABLE
#include <cholmod.h>
#endif
......@@ -245,7 +245,7 @@ template<class MatrixT>
void print_dense( const MatrixT& _A);
#ifndef COMISO_NCHOLMOD
#if COMISO_SUITESPARSE_AVAILABLE
/// GMM to Cholmod_sparse interface
template<class MatrixT>
......
......@@ -23,6 +23,9 @@
\*===========================================================================*/
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_SUITESPARSE_AVAILABLE
#include "UMFPACKSolver.hh"
......@@ -238,3 +241,7 @@ bool UMFPACKSolver::solve( double * _x, double * _b)
}
//=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
......@@ -33,6 +33,10 @@
#define COMISO_UMFPACK_SOLVER_HH
//== COMPILE-TIME PACKAGE REQUIREMENTS ========================================
#include <CoMISo/Config/config.hh>
#if COMISO_SUITESPARSE_AVAILABLE
//== INCLUDES =================================================================
......@@ -129,5 +133,7 @@ public:
#include "UMFPACKSolverT.cc"
#endif
//=============================================================================
#endif // COMISO_SUITESPARSE_AVAILABLE
//=============================================================================
#endif // COMISO_UMFPACK_SOLVER_HH defined
//=============================================================================
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment