void tlin::solve(SuperFactors *F, SuperMatrix *B, SuperMatrix *&X, superlu_options_t *opt) { if (!X) allocD(X, B->nrow, B->ncol); double *Bvalues = 0, *Xvalues = 0; int lda; readDN(B, lda, Bvalues); readDN(X, lda, Xvalues); memcpy(Xvalues, Bvalues, B->nrow * B->ncol * sizeof(double)); solve(F, X, opt); }
void tlin::traduceD(const mat &m, SuperMatrix *&A) { int rows = m.rows(), cols = m.cols(); if (!A) allocD(A, rows, cols); int lda; double *Avalues = 0; readDN(A, lda, Avalues); assert(A->nrow == rows && A->ncol == cols && lda == rows); memcpy(Avalues, m.values(), rows * cols * sizeof(double)); }
void tlin::traduceD(const tlin::sparse_matrix<double> &m, SuperMatrix *&A) { int rows = m.rows(), cols = m.cols(); const spmat::HashMap &entries = m.entries(); // Build or extract pointers to out's data double *values; if (!A) allocD(A, rows, cols); // Retrieve DN arrays from A int lda; readDN(A, lda, values); assert(A->nrow == rows && A->ncol == cols && lda == rows); // Copy each value in entries to A spmat::HashMap::const_iterator it; for (it = entries.begin(); it != entries.end(); ++it) values[it->m_key.second * rows + it->m_key.first] = it->m_val; }