int BandMatrix::solve(int n, doublereal* b) { int info = 0; if (!m_factored) info = factor(); if (info == 0) ct_dgbtrs(ctlapack::NoTranspose, columns(), nSubDiagonals(), nSuperDiagonals(), 1, DATA_PTR(ludata), ldim(), DATA_PTR(ipiv()), b, columns(), info); // error handling if (info != 0) { ofstream fout("bandmatrix.csv"); fout << *this << endl; fout.close(); } return info; }
int BandMatrix::factor() { int info=0; ludata = data; ct_dgbtrf(nRows(), nColumns(), nSubDiagonals(), nSuperDiagonals(), ludata.data(), ldim(), ipiv().data(), info); // if info = 0, LU decomp succeeded. if (info == 0) { m_factored = true; } else { m_factored = false; ofstream fout("bandmatrix.csv"); fout << *this << endl; } return info; }
/** * Perform an LU decomposition. LAPACK routine DGBTRF is used. * The factorization is saved in ludata. */ int BandMatrix::factor() { int info=0; copy(data.begin(), data.end(), ludata.begin()); ct_dgbtrf(rows(), columns(), nSubDiagonals(), nSuperDiagonals(), DATA_PTR(ludata), ldim(), DATA_PTR(ipiv()), info); // if info = 0, LU decomp succeeded. if (info == 0) { m_factored = true; } else { m_factored = false; ofstream fout("bandmatrix.csv"); fout << *this << endl; fout.close(); } return info; }
int BandMatrix::solve(doublereal* b, size_t nrhs, size_t ldb) { int info = 0; if (!m_factored) { info = factor(); } if (ldb == 0) { ldb = nColumns(); } if (info == 0) { ct_dgbtrs(ctlapack::NoTranspose, nColumns(), nSubDiagonals(), nSuperDiagonals(), nrhs, ludata.data(), ldim(), ipiv().data(), b, ldb, info); } // error handling if (info != 0) { ofstream fout("bandmatrix.csv"); fout << *this << endl; } return info; }