Eigen::PastixBase< Derived > Class Template Reference

#include <PaStiXSupport.h>

+ Inheritance diagram for Eigen::PastixBase< Derived >:

Public Types

enum  { ColsAtCompileTime = MatrixType::ColsAtCompileTime , MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime }
 
typedef internal::pastix_traits< Derived >::MatrixType MatrixType_
 
typedef MatrixType_ MatrixType
 
typedef MatrixType::Scalar Scalar
 
typedef MatrixType::RealScalar RealScalar
 
typedef MatrixType::StorageIndex StorageIndex
 
typedef Matrix< Scalar, Dynamic, 1 > Vector
 
typedef SparseMatrix< Scalar, ColMajorColSpMatrix
 

Public Member Functions

 PastixBase ()
 
 ~PastixBase ()
 
template<typename Rhs , typename Dest >
bool _solve_impl (const MatrixBase< Rhs > &b, MatrixBase< Dest > &x) const
 
Array< StorageIndex, IPARM_SIZE, 1 > & iparm ()
 
intiparm (int idxparam)
 
Array< double, DPARM_SIZE, 1 > & dparm ()
 
doubledparm (int idxparam)
 
Index cols () const
 
Index rows () const
 
ComputationInfo info () const
 Reports whether previous computation was successful. More...
 
template<typename Rhs , typename Dest >
void _solve_impl (const SparseMatrixBase< Rhs > &b, SparseMatrixBase< Dest > &dest) const
 
- Public Member Functions inherited from Eigen::SparseSolverBase< Derived >
 SparseSolverBase ()
 
 SparseSolverBase (SparseSolverBase &&other)
 
 ~SparseSolverBase ()
 
Derived & derived ()
 
const Derived & derived () const
 
template<typename Rhs >
const Solve< Derived, Rhs > solve (const MatrixBase< Rhs > &b) const
 
template<typename Rhs >
const Solve< Derived, Rhs > solve (const SparseMatrixBase< Rhs > &b) const
 
template<typename Rhs , typename Dest >
void _solve_impl (const SparseMatrixBase< Rhs > &b, SparseMatrixBase< Dest > &dest) const
 

Protected Types

typedef SparseSolverBase< Derived > Base
 

Protected Member Functions

void init ()
 
void analyzePattern (ColSpMatrix &mat)
 
void factorize (ColSpMatrix &mat)
 
void clean ()
 
void compute (ColSpMatrix &mat)
 
Derived & derived ()
 
const Derived & derived () const
 

Protected Attributes

int m_initisOk
 
int m_analysisIsOk
 
int m_factorizationIsOk
 
ComputationInfo m_info
 
pastix_data_t * m_pastixdata
 
int m_comm
 
Array< int, IPARM_SIZE, 1 > m_iparm
 
Array< double, DPARM_SIZE, 1 > m_dparm
 
Matrix< StorageIndex, Dynamic, 1 > m_perm
 
Matrix< StorageIndex, Dynamic, 1 > m_invp
 
int m_size
 
bool m_isInitialized
 
- Protected Attributes inherited from Eigen::SparseSolverBase< Derived >
bool m_isInitialized
 

Member Typedef Documentation

◆ Base

template<class Derived >
typedef SparseSolverBase<Derived> Eigen::PastixBase< Derived >::Base
protected

◆ ColSpMatrix

template<class Derived >
typedef SparseMatrix<Scalar, ColMajor> Eigen::PastixBase< Derived >::ColSpMatrix

◆ MatrixType

template<class Derived >
typedef MatrixType_ Eigen::PastixBase< Derived >::MatrixType

◆ MatrixType_

template<class Derived >
typedef internal::pastix_traits<Derived>::MatrixType Eigen::PastixBase< Derived >::MatrixType_

◆ RealScalar

template<class Derived >
typedef MatrixType::RealScalar Eigen::PastixBase< Derived >::RealScalar

◆ Scalar

template<class Derived >
typedef MatrixType::Scalar Eigen::PastixBase< Derived >::Scalar

◆ StorageIndex

template<class Derived >
typedef MatrixType::StorageIndex Eigen::PastixBase< Derived >::StorageIndex

◆ Vector

template<class Derived >
typedef Matrix<Scalar, Dynamic, 1> Eigen::PastixBase< Derived >::Vector

Member Enumeration Documentation

◆ anonymous enum

template<class Derived >
anonymous enum
Enumerator
ColsAtCompileTime 
MaxColsAtCompileTime 
171 { ColsAtCompileTime = MatrixType::ColsAtCompileTime, MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime };
@ ColsAtCompileTime
Definition: PaStiXSupport.h:171
@ MaxColsAtCompileTime
Definition: PaStiXSupport.h:171

Constructor & Destructor Documentation

◆ PastixBase()

template<class Derived >
Eigen::PastixBase< Derived >::PastixBase ( )
inline
174  : m_initisOk(false), m_analysisIsOk(false), m_factorizationIsOk(false), m_pastixdata(0), m_size(0) {
175  init();
176  }
int m_factorizationIsOk
Definition: PaStiXSupport.h:246
int m_analysisIsOk
Definition: PaStiXSupport.h:245
int m_initisOk
Definition: PaStiXSupport.h:244
int m_size
Definition: PaStiXSupport.h:254
void init()
Definition: PaStiXSupport.h:262
pastix_data_t * m_pastixdata
Definition: PaStiXSupport.h:248

References Eigen::PastixBase< Derived >::init().

◆ ~PastixBase()

template<class Derived >
Eigen::PastixBase< Derived >::~PastixBase ( )
inline
178 { clean(); }
void clean()
Definition: PaStiXSupport.h:234

References Eigen::PastixBase< Derived >::clean().

Member Function Documentation

◆ _solve_impl() [1/2]

template<typename Base >
template<typename Rhs , typename Dest >
bool Eigen::PastixBase< Base >::_solve_impl ( const MatrixBase< Rhs > &  b,
MatrixBase< Dest > &  x 
) const
355  {
356  eigen_assert(m_isInitialized && "The matrix should be factorized first");
357  EIGEN_STATIC_ASSERT((Dest::Flags & RowMajorBit) == 0, THIS_METHOD_IS_ONLY_FOR_COLUMN_MAJOR_MATRICES);
358  int rhs = 1;
359 
360  x = b; /* on return, x is overwritten by the computed solution */
361 
362  for (int i = 0; i < b.cols(); i++) {
363  m_iparm[IPARM_START_TASK] = API_TASK_SOLVE;
364  m_iparm[IPARM_END_TASK] = API_TASK_REFINE;
365 
366  internal::eigen_pastix(&m_pastixdata, MPI_COMM_WORLD, internal::convert_index<int>(x.rows()), 0, 0, 0,
367  m_perm.data(), m_invp.data(), &x(0, i), rhs, m_iparm.data(), m_dparm.data());
368  }
369 
370  // Check the returned error
371  m_info = m_iparm(IPARM_ERROR_NUMBER) == 0 ? Success : NumericalIssue;
372 
373  return m_iparm(IPARM_ERROR_NUMBER) == 0;
374 }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
#define eigen_assert(x)
Definition: Macros.h:910
#define EIGEN_STATIC_ASSERT(X, MSG)
Definition: StaticAssert.h:26
Scalar * b
Definition: benchVecAdd.cpp:17
Matrix< StorageIndex, Dynamic, 1 > m_invp
Definition: PaStiXSupport.h:253
Matrix< StorageIndex, Dynamic, 1 > m_perm
Definition: PaStiXSupport.h:252
Array< int, IPARM_SIZE, 1 > m_iparm
Definition: PaStiXSupport.h:250
bool m_isInitialized
Definition: SparseSolverBase.h:110
ComputationInfo m_info
Definition: PaStiXSupport.h:247
Array< double, DPARM_SIZE, 1 > m_dparm
Definition: PaStiXSupport.h:251
constexpr EIGEN_DEVICE_FUNC const Scalar * data() const
Definition: PlainObjectBase.h:273
@ NumericalIssue
Definition: Constants.h:442
@ Success
Definition: Constants.h:440
const unsigned int RowMajorBit
Definition: Constants.h:70
void eigen_pastix(pastix_data_t **pastix_data, int pastix_comm, int n, int *ptr, int *idx, float *vals, int *perm, int *invp, float *x, int nbrhs, int *iparm, double *dparm)
Definition: PaStiXSupport.h:70
list x
Definition: plotDoE.py:28

References b, eigen_assert, Eigen::internal::eigen_pastix(), EIGEN_STATIC_ASSERT, i, Eigen::NumericalIssue, Eigen::RowMajorBit, Eigen::Success, and plotDoE::x.

◆ _solve_impl() [2/2]

template<class Derived >
template<typename Rhs , typename Dest >
void Eigen::SparseSolverBase< Derived >::_solve_impl ( typename Rhs  ,
typename Dest   
)
inline

default implementation of solving with a sparse rhs

104  {
105  internal::solve_sparse_through_dense_panels(derived(), b.derived(), dest.derived());
106  }
Derived & derived()
Definition: SparseSolverBase.h:76
std::enable_if_t< Rhs::ColsAtCompileTime !=1 &&Dest::ColsAtCompileTime !=1 > solve_sparse_through_dense_panels(const Decomposition &dec, const Rhs &rhs, Dest &dest)
Definition: SparseSolverBase.h:25

◆ analyzePattern()

template<class Derived >
void Eigen::PastixBase< Derived >::analyzePattern ( ColSpMatrix mat)
protected
304  {
305  eigen_assert(m_initisOk && "The initialization of PaSTiX failed");
306 
307  // clean previous calls
308  if (m_size > 0) clean();
309 
310  m_size = internal::convert_index<int>(mat.rows());
313 
314  m_iparm(IPARM_START_TASK) = API_TASK_ORDERING;
315  m_iparm(IPARM_END_TASK) = API_TASK_ANALYSE;
317  mat.valuePtr(), m_perm.data(), m_invp.data(), 0, 0, m_iparm.data(), m_dparm.data());
318 
319  // Check the returned error
320  if (m_iparm(IPARM_ERROR_NUMBER)) {
322  m_analysisIsOk = false;
323  } else {
324  m_info = Success;
325  m_analysisIsOk = true;
326  }
327 }
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE void resize(Index rows, Index cols)
Definition: PlainObjectBase.h:294
const Scalar * valuePtr() const
Definition: SparseMatrix.h:171
Index rows() const
Definition: SparseMatrix.h:159
const StorageIndex * outerIndexPtr() const
Definition: SparseMatrix.h:189
const StorageIndex * innerIndexPtr() const
Definition: SparseMatrix.h:180

References eigen_assert, Eigen::internal::eigen_pastix(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::innerIndexPtr(), Eigen::NumericalIssue, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::outerIndexPtr(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows(), Eigen::Success, and Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::valuePtr().

Referenced by Eigen::PastixLU< MatrixType_, IsStrSym >::analyzePattern(), Eigen::PastixLLT< MatrixType_, UpLo_ >::analyzePattern(), and Eigen::PastixLDLT< MatrixType_, UpLo_ >::analyzePattern().

◆ clean()

template<class Derived >
void Eigen::PastixBase< Derived >::clean ( )
inlineprotected
234  {
235  eigen_assert(m_initisOk && "The Pastix structure should be allocated first");
236  m_iparm(IPARM_START_TASK) = API_TASK_CLEAN;
237  m_iparm(IPARM_END_TASK) = API_TASK_CLEAN;
238  internal::eigen_pastix(&m_pastixdata, MPI_COMM_WORLD, 0, 0, 0, (Scalar *)0, m_perm.data(), m_invp.data(), 0, 0,
239  m_iparm.data(), m_dparm.data());
240  }
SCALAR Scalar
Definition: bench_gemm.cpp:45

References Eigen::PlainObjectBase< Derived >::data(), eigen_assert, Eigen::internal::eigen_pastix(), Eigen::PastixBase< Derived >::m_dparm, Eigen::PastixBase< Derived >::m_initisOk, Eigen::PastixBase< Derived >::m_invp, Eigen::PastixBase< Derived >::m_iparm, Eigen::PastixBase< Derived >::m_pastixdata, and Eigen::PastixBase< Derived >::m_perm.

Referenced by Eigen::PastixBase< Derived >::~PastixBase().

◆ cols()

◆ compute()

template<class Derived >
void Eigen::PastixBase< Derived >::compute ( ColSpMatrix mat)
protected
294  {
295  eigen_assert(mat.rows() == mat.cols() && "The input matrix should be squared");
296 
298  factorize(mat);
299 
300  m_iparm(IPARM_MATRIX_VERIFICATION) = API_NO;
301 }
void analyzePattern(ColSpMatrix &mat)
Definition: PaStiXSupport.h:304
void factorize(ColSpMatrix &mat)
Definition: PaStiXSupport.h:330
Index cols() const
Definition: SparseMatrix.h:161

References Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::cols(), eigen_assert, and Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows().

Referenced by Eigen::PastixLU< MatrixType_, IsStrSym >::compute(), Eigen::PastixLLT< MatrixType_, UpLo_ >::compute(), and Eigen::PastixLDLT< MatrixType_, UpLo_ >::compute().

◆ derived() [1/2]

template<class Derived >
Derived& Eigen::SparseSolverBase< Derived >::derived
inlineprotected
76 { return *static_cast<Derived*>(this); }

◆ derived() [2/2]

template<class Derived >
const Derived& Eigen::SparseSolverBase< Derived >::derived
inlineprotected
77 { return *static_cast<const Derived*>(this); }

◆ dparm() [1/2]

template<class Derived >
Array<double, DPARM_SIZE, 1>& Eigen::PastixBase< Derived >::dparm ( )
inline

Returns a reference to the double vector DPARM of PaStiX parameters The statistics related to the different phases of factorization and solve are saved here as well

See also
analyzePattern() factorize()
200 { return m_dparm; }

References Eigen::PastixBase< Derived >::m_dparm.

Referenced by test_pastix_T().

◆ dparm() [2/2]

template<class Derived >
double& Eigen::PastixBase< Derived >::dparm ( int  idxparam)
inline

Return a reference to a particular index parameter of the DPARM vector

See also
dparm()
205 { return m_dparm(idxparam); }

References Eigen::PastixBase< Derived >::m_dparm.

◆ factorize()

template<class Derived >
void Eigen::PastixBase< Derived >::factorize ( ColSpMatrix mat)
protected
330  {
331  // if(&m_cpyMat != &mat) m_cpyMat = mat;
332  eigen_assert(m_analysisIsOk && "The analysis phase should be called before the factorization phase");
333  m_iparm(IPARM_START_TASK) = API_TASK_NUMFACT;
334  m_iparm(IPARM_END_TASK) = API_TASK_NUMFACT;
335  m_size = internal::convert_index<int>(mat.rows());
336 
338  mat.valuePtr(), m_perm.data(), m_invp.data(), 0, 0, m_iparm.data(), m_dparm.data());
339 
340  // Check the returned error
341  if (m_iparm(IPARM_ERROR_NUMBER)) {
343  m_factorizationIsOk = false;
344  m_isInitialized = false;
345  } else {
346  m_info = Success;
347  m_factorizationIsOk = true;
348  m_isInitialized = true;
349  }
350 }

References eigen_assert, Eigen::internal::eigen_pastix(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::innerIndexPtr(), Eigen::NumericalIssue, Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::outerIndexPtr(), Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::rows(), Eigen::Success, and Eigen::SparseMatrix< Scalar_, Options_, StorageIndex_ >::valuePtr().

Referenced by Eigen::PastixLU< MatrixType_, IsStrSym >::factorize(), Eigen::PastixLLT< MatrixType_, UpLo_ >::factorize(), and Eigen::PastixLDLT< MatrixType_, UpLo_ >::factorize().

◆ info()

template<class Derived >
ComputationInfo Eigen::PastixBase< Derived >::info ( ) const
inline

Reports whether previous computation was successful.

Returns
Success if computation was successful, NumericalIssue if the PaStiX reports a problem InvalidInput if the input matrix is invalid
See also
iparm()
218  {
219  eigen_assert(m_isInitialized && "Decomposition is not initialized.");
220  return m_info;
221  }

References eigen_assert, Eigen::PastixBase< Derived >::m_info, and Eigen::PastixBase< Derived >::m_isInitialized.

◆ init()

template<class Derived >
void Eigen::PastixBase< Derived >::init
protected

Initialize the PaStiX data structure. A first call to this function fills iparm and dparm with the default PaStiX parameters

See also
iparm() dparm()
262  {
263  m_size = 0;
264  m_iparm.setZero(IPARM_SIZE);
265  m_dparm.setZero(DPARM_SIZE);
266 
267  m_iparm(IPARM_MODIFY_PARAMETER) = API_NO;
268  pastix(&m_pastixdata, MPI_COMM_WORLD, 0, 0, 0, 0, 0, 0, 0, 1, m_iparm.data(), m_dparm.data());
269 
270  m_iparm[IPARM_MATRIX_VERIFICATION] = API_NO;
271  m_iparm[IPARM_VERBOSE] = API_VERBOSE_NOT;
272  m_iparm[IPARM_ORDERING] = API_ORDER_SCOTCH;
273  m_iparm[IPARM_INCOMPLETE] = API_NO;
274  m_iparm[IPARM_OOC_LIMIT] = 2000;
275  m_iparm[IPARM_RHS_MAKING] = API_RHS_B;
276  m_iparm(IPARM_MATRIX_VERIFICATION) = API_NO;
277 
278  m_iparm(IPARM_START_TASK) = API_TASK_INIT;
279  m_iparm(IPARM_END_TASK) = API_TASK_INIT;
280  internal::eigen_pastix(&m_pastixdata, MPI_COMM_WORLD, 0, 0, 0, (Scalar *)0, 0, 0, 0, 0, m_iparm.data(),
281  m_dparm.data());
282 
283  // Check the returned error
284  if (m_iparm(IPARM_ERROR_NUMBER)) {
286  m_initisOk = false;
287  } else {
288  m_info = Success;
289  m_initisOk = true;
290  }
291 }
EIGEN_DEVICE_FUNC Derived & setZero(Index size)
Definition: CwiseNullaryOp.h:569
@ InvalidInput
Definition: Constants.h:447

References Eigen::internal::eigen_pastix(), Eigen::InvalidInput, and Eigen::Success.

Referenced by Eigen::PastixBase< Derived >::PastixBase().

◆ iparm() [1/2]

template<class Derived >
Array<StorageIndex, IPARM_SIZE, 1>& Eigen::PastixBase< Derived >::iparm ( )
inline

Returns a reference to the integer vector IPARM of PaStiX parameters to modify the default parameters. The statistics related to the different phases of factorization and solve are saved here as well

See also
analyzePattern() factorize()
188 { return m_iparm; }

References Eigen::PastixBase< Derived >::m_iparm.

Referenced by test_pastix_T().

◆ iparm() [2/2]

template<class Derived >
int& Eigen::PastixBase< Derived >::iparm ( int  idxparam)
inline

Return a reference to a particular index parameter of the IPARM vector

See also
iparm()
194 { return m_iparm(idxparam); }

References Eigen::PastixBase< Derived >::m_iparm.

◆ rows()

Member Data Documentation

◆ m_analysisIsOk

template<class Derived >
int Eigen::PastixBase< Derived >::m_analysisIsOk
protected

◆ m_comm

template<class Derived >
int Eigen::PastixBase< Derived >::m_comm
mutableprotected

◆ m_dparm

template<class Derived >
Array<double, DPARM_SIZE, 1> Eigen::PastixBase< Derived >::m_dparm
mutableprotected

◆ m_factorizationIsOk

template<class Derived >
int Eigen::PastixBase< Derived >::m_factorizationIsOk
protected

◆ m_info

template<class Derived >
ComputationInfo Eigen::PastixBase< Derived >::m_info
mutableprotected

◆ m_initisOk

template<class Derived >
int Eigen::PastixBase< Derived >::m_initisOk
protected

◆ m_invp

template<class Derived >
Matrix<StorageIndex, Dynamic, 1> Eigen::PastixBase< Derived >::m_invp
mutableprotected

◆ m_iparm

template<class Derived >
Array<int, IPARM_SIZE, 1> Eigen::PastixBase< Derived >::m_iparm
mutableprotected

◆ m_isInitialized

template<class Derived >
bool Eigen::SparseSolverBase< Derived >::m_isInitialized
mutableprotected

◆ m_pastixdata

template<class Derived >
pastix_data_t* Eigen::PastixBase< Derived >::m_pastixdata
mutableprotected

◆ m_perm

template<class Derived >
Matrix<StorageIndex, Dynamic, 1> Eigen::PastixBase< Derived >::m_perm
mutableprotected

◆ m_size

template<class Derived >
int Eigen::PastixBase< Derived >::m_size
mutableprotected

The documentation for this class was generated from the following file: