Update the PARDISO interface to match other sparse solvers.

- Add support for Upper or Lower inputs.
- Add supports for sparse RHS
- Remove transposed cases, remove ordering method interface
- Add full access to PARDISO parameters
This commit is contained in:
Gael Guennebaud
2012-02-04 14:20:56 +01:00
parent 1763f86364
commit 4ed87c59c7
4 changed files with 181 additions and 126 deletions

View File

@@ -7,11 +7,12 @@
template<typename T> void test_pardiso_T()
{
//PardisoLLT < SparseMatrix<T, RowMajor> > pardiso_llt;
//PardisoLDLT< SparseMatrix<T, RowMajor> > pardiso_ldlt;
PardisoLLT < SparseMatrix<T, RowMajor> > pardiso_llt;
PardisoLDLT< SparseMatrix<T, RowMajor> > pardiso_ldlt;
PardisoLU < SparseMatrix<T, RowMajor> > pardiso_lu;
//check_sparse_spd_solving(pardiso_llt);
check_sparse_spd_solving(pardiso_llt);
check_sparse_spd_solving(pardiso_ldlt);
check_sparse_square_solving(pardiso_lu);
}

View File

@@ -101,6 +101,7 @@ template<typename Solver> void check_sparse_spd_solving(Solver& solver)
{
typedef typename Solver::MatrixType Mat;
typedef typename Mat::Scalar Scalar;
typedef SparseMatrix<Scalar,ColMajor> SpMat;
typedef Matrix<Scalar,Dynamic,Dynamic> DenseMatrix;
typedef Matrix<Scalar,Dynamic,1> DenseVector;
@@ -112,7 +113,7 @@ template<typename Solver> void check_sparse_spd_solving(Solver& solver)
// generate the right hand sides
int rhsCols = internal::random<int>(1,16);
double density = (std::max)(8./(size*rhsCols), 0.1);
Mat B(size,rhsCols);
SpMat B(size,rhsCols);
DenseVector b = DenseVector::Random(size);
DenseMatrix dB(size,rhsCols);
initSparse<Scalar>(density, dB, B);