diff --git a/Numeric/fullMatrix.cpp b/Numeric/fullMatrix.cpp index 58abf9f24acedef0ec3e4a1410a495207efbaa46..b4325e0ef689f50373300ecf07721e86794f8488 100644 --- a/Numeric/fullMatrix.cpp +++ b/Numeric/fullMatrix.cpp @@ -290,24 +290,22 @@ bool fullMatrix<double>::luSolve(const fullVector<double> &rhs, fullVector<doubl } template<> -bool fullMatrix<double>::luFactor() +bool fullMatrix<double>::luFactor(fullVector<int> &ipiv) { int M = size1(), N = size2(), lda = size1(), info; - int *ipiv = new int[std::min(M, N)]; - F77NAME(dgetrf)(&M, &N, _data, &lda, ipiv, &info); - delete [] ipiv; + ipiv.resize(std::min(M, N)); + F77NAME(dgetrf)(&M, &N, _data, &lda, &ipiv(0), &info); if(info == 0) return true; return false; } template<> -bool fullMatrix<double>::luSubstitute(const fullVector<double> &rhs, fullVector<double> &result) +bool fullMatrix<double>::luSubstitute(const fullVector<double> &rhs, fullVector<int> &ipiv, fullVector<double> &result) { int N = size1(), nrhs=1, lda = N, ldb = N, info; - int *ipiv = new int[N]; + char trans = 'N'; for(int i = 0; i < N; i++) result(i) = rhs(i); - F77NAME(dgetrs)("N", &N, &nrhs, _data, &lda, ipiv, result._data, &ldb, &info); - delete [] ipiv; + F77NAME(dgetrs)(&trans, &N, &nrhs, _data, &lda, &ipiv(0), result._data, &ldb, &info); if(info == 0) return true; return false; } diff --git a/Numeric/fullMatrix.h b/Numeric/fullMatrix.h index 74cf557c339c2bf627cb68157b415dc9dbde60a5..74debb530eefa04985ea788cf681b3cf529af794 100644 --- a/Numeric/fullMatrix.h +++ b/Numeric/fullMatrix.h @@ -686,7 +686,7 @@ class fullMatrix } #endif ; - bool luFactor() + bool luFactor(fullVector<int> &ipiv) #if !defined(HAVE_LAPACK) { Msg::Error("LU factorization requires LAPACK"); @@ -694,7 +694,7 @@ class fullMatrix } #endif ; - bool luSubstitute(const fullVector<double> &rhs, fullVector<double> &result) + bool luSubstitute(const fullVector<scalar> &rhs, fullVector<int> &ipiv, fullVector<scalar> &result) #if !defined(HAVE_LAPACK) { Msg::Error("LU substitution requires LAPACK");