26 int size = systemMatrix.rows();
29 auto hMat = systemMatrix;
30 size_t nnz = hMat.nonZeros();
31 cusparseMatDescr_t descr_M = 0;
33 cusolverSpHandle_t mCusolverhandle;
34 if (cusolverSpCreate(&mCusolverhandle) != CUSOLVER_STATUS_SUCCESS) {
38 if (cusparseCreateMatDescr(&descr_M) != CUSPARSE_STATUS_SUCCESS) {
43 if (cusparseSetMatIndexBase(descr_M, CUSPARSE_INDEX_BASE_ZERO) !=
44 CUSPARSE_STATUS_SUCCESS) {
48 if (cusparseSetMatType(descr_M, CUSPARSE_MATRIX_TYPE_GENERAL) !=
49 CUSPARSE_STATUS_SUCCESS) {
54 if (cusolverSpDcsrzfdHost(mCusolverhandle, size, nnz, descr_M,
55 hMat.valuePtr(), hMat.outerIndexPtr(),
56 hMat.innerIndexPtr(), p,
57 &p_nnz) != CUSOLVER_STATUS_SUCCESS) {
63 mTransp = std::unique_ptr<Eigen::PermutationMatrix<Eigen::Dynamic>>(
64 new Eigen::PermutationMatrix<Eigen::Dynamic>(
65 Eigen::Map<Eigen::Matrix<int, Eigen::Dynamic, 1>>(p, size, 1)));
73 magma_dcsrset(size, size, hMat.outerIndexPtr(), hMat.innerIndexPtr(),
76 mMagmaOpts.solver_par.solver = Magma_PIDRMERGE;
83 mMagmaOpts.precond_par.trisolver = Magma_CUSOLVE;
93 cusolverSpDestroy(mCusolverhandle);
94 cusparseDestroyMatDescr(descr_M);
virtual void preprocessing(SparseMatrix &systemMatrix, std::vector< std::pair< UInt, UInt > > &listVariableSystemMatrixEntries) override
preprocessing function pre-ordering and scaling the matrix