This forum has been archived. All content is frozen. Please use KDE Discuss instead.

problem with Eigen::PardisoLDLT

Tags: None
(comma "," separated)
renzh
Registered Member
Posts
8
Karma
0
OS

problem with Eigen::PardisoLDLT

Mon Jul 30, 2012 2:36 pm
Dear Eigens,

I have a problem of using Eigen::PardisoLDLT.

In my code,
1.
typedef std::complex<double> Dcomplex;
typedef Eigen::SparseMatrix<Dcomplex, Eigen::RowMajor> DSparseMatrix; // row-major
2. I define a solver as Eigen::PardisoLDLT< DSparseMatrix, Eigen::Symmetric> solver;

By using icpc (composer_xe_2011_sp1.8.273/composer_xe_2011_sp1.8.273/bin/intel64/icpc), I get a error like:

../contrib/eigen-3.1.0-alpha2/Eigen/src/PARDISOSupport/PARDISOSupport.h(100): e
rror: incomplete type is not allowed
typedef typename internal::pardiso_traits<Derived>::MatrixType MatrixType
;
^
detected during:
instantiation of class "Eigen::PardisoImpl<Derived> [with Derived=E
igen::PardisoLDLT<EBEM::DSparseMatrix, 32>]" at line 440
instantiation of class "Eigen::PardisoLDLT<MatrixType, Options> [wi
th MatrixType=EBEM::DSparseMatrix, Options=32]" at line 100 of "../src/feti_dp.
h"


My question is that is this function Eigen::PardisoLDLT for symmetric indefinite complex matrix available?

Best wishes
Zhengyong
User avatar
ggael
Moderator
Posts
3447
Karma
19
OS

Re: problem with Eigen::PardisoLDLT

Thu Aug 02, 2012 12:49 pm
As explain in the doc, the second template parameter of PardisoLDLT must be Upper or Lower. Symmetric is not allowed here. Actually, here LDLT rather means L.D.L^*, so the matrix is assumed to be selfadjoint.
eigenlearner
Registered Member
Posts
17
Karma
0

Re: problem with Eigen::PardisoLDLT

Thu Aug 02, 2012 3:08 pm
ggael wrote:As explain in the doc, the second template parameter of PardisoLDLT must be Upper or Lower. Symmetric is not allowed here. Actually, here LDLT rather means L.D.L^*, so the matrix is assumed to be selfadjoint.


Good to know that Eigen has the support for Pardico.

Do I need to link against the Pardiso library in order to use it?
User avatar
ggael
Moderator
Posts
3447
Karma
19
OS

Re: problem with Eigen::PardisoLDLT

Thu Aug 02, 2012 8:35 pm
yes, it's up to the user to make sure the Pardiso headers are available, and to link to MKL:

http://eigen.tuxfamily.org/dox/TopicUsingIntelMKL.html
renzh
Registered Member
Posts
8
Karma
0
OS

Re: problem with Eigen::PardisoLDLT

Fri Aug 03, 2012 3:05 pm
ggael wrote:As explain in the doc, the second template parameter of PardisoLDLT must be Upper or Lower. Symmetric is not allowed here. Actually, here LDLT rather means L.D.L^*, so the matrix is assumed to be selfadjoint.


Dear ggael,

I used the doc from
http://eigen.tuxfamily.org/dox/classEig ... oLDLT.html.

It says it is possible of using Symmetric in PardisoLDLT.
Maybe I used the wrong doc.

template<typename MatrixType, int Options>
class Eigen::PardisoLDLT< MatrixType, Options >
A sparse direct Cholesky (LDLT) factorization and solver based on the PARDISO library.
This class allows to solve for A.X = B sparse linear problems via a LDL^T Cholesky factorization using the Intel MKL PARDISO library. The sparse matrix A is assumed to be selfajoint and positive definite. For complex matrices, A can also be symmetric only, see the Options template parameter. The vectors or matrices X and B can be either dense or sparse.
Template Parameters:
MatrixType the type of the sparse matrix A, it must be a SparseMatrix<>
Options can be any bitwise combination of Upper, Lower, and Symmetric. The default is Upper, meaning only the upper triangular part has to be used. Symmetric can be used for symmetric, non-selfadjoint complex matrices, the default being to assume a selfadjoint matrix. Upper|Lower can be used to tell both triangular parts can be used as input.


Thanks a lot for your help
Best wishes
Zhengyong
User avatar
ggael
Moderator
Posts
3447
Karma
19
OS
oh, ok. Looking back at your first post I see you are using the old alpha2 version, could you try the 3.1.1 release.


Bookmarks



Who is online

Registered users: Baidu [Spider], Bing [Bot], Google [Bot]