From 18dad63040ded686187204f549d38100f62fe388 Mon Sep 17 00:00:00 2001 From: Alberto Ruiz Date: Mon, 29 Jun 2015 11:43:48 +0200 Subject: use lda in lus --- packages/base/src/Internal/C/lapack-aux.c | 6 ++++-- packages/base/src/Internal/LAPACK.hs | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) (limited to 'packages/base') diff --git a/packages/base/src/Internal/C/lapack-aux.c b/packages/base/src/Internal/C/lapack-aux.c index 72c44cb..80e5720 100644 --- a/packages/base/src/Internal/C/lapack-aux.c +++ b/packages/base/src/Internal/C/lapack-aux.c @@ -1124,6 +1124,7 @@ int dgetrs_(char *trans, integer *n, integer *nrhs, int luS_l_R(KODMAT(a), KDVEC(ipiv), ODMAT(b)) { integer m = ar; integer n = ac; + integer lda = aXc; integer mrhs = br; integer nrhs = bc; @@ -1134,7 +1135,7 @@ int luS_l_R(KODMAT(a), KDVEC(ipiv), ODMAT(b)) { auxipiv[k] = (integer)ipivp[k]; } integer res; - dgetrs_ ("N",&n,&nrhs,(/*no const (!?)*/ double*)ap,&m,auxipiv,bp,&mrhs,&res); + dgetrs_ ("N",&n,&nrhs,(/*no const (!?)*/ double*)ap,&lda,auxipiv,bp,&mrhs,&res); CHECK(res,res); free(auxipiv); OK @@ -1148,6 +1149,7 @@ int zgetrs_(char *trans, integer *n, integer *nrhs, int luS_l_C(KOCMAT(a), KDVEC(ipiv), OCMAT(b)) { integer m = ar; integer n = ac; + integer lda = aXc; integer mrhs = br; integer nrhs = bc; @@ -1158,7 +1160,7 @@ int luS_l_C(KOCMAT(a), KDVEC(ipiv), OCMAT(b)) { auxipiv[k] = (integer)ipivp[k]; } integer res; - zgetrs_ ("N",&n,&nrhs,(doublecomplex*)ap,&m,auxipiv,bp,&mrhs,&res); + zgetrs_ ("N",&n,&nrhs,(doublecomplex*)ap,&lda,auxipiv,bp,&mrhs,&res); CHECK(res,res); free(auxipiv); OK diff --git a/packages/base/src/Internal/LAPACK.hs b/packages/base/src/Internal/LAPACK.hs index 049c11e..124e353 100644 --- a/packages/base/src/Internal/LAPACK.hs +++ b/packages/base/src/Internal/LAPACK.hs @@ -544,11 +544,11 @@ foreign import ccall unsafe "lu_l_C" zgetrf :: R :> C ::> Ok -- | LU factorization of a general real matrix, using LAPACK's /dgetrf/. luR :: Matrix Double -> (Matrix Double, [Int]) -luR = luAux dgetrf "luR" . fmat +luR = luAux dgetrf "luR" -- | LU factorization of a general complex matrix, using LAPACK's /zgetrf/. luC :: Matrix (Complex Double) -> (Matrix (Complex Double), [Int]) -luC = luAux zgetrf "luC" . fmat +luC = luAux zgetrf "luC" luAux f st a = unsafePerformIO $ do lu <- copy ColumnMajor a @@ -566,11 +566,11 @@ foreign import ccall unsafe "luS_l_C" zgetrs :: C ::> R :> C ::> Ok -- | Solve a real linear system from a precomputed LU decomposition ('luR'), using LAPACK's /dgetrs/. lusR :: Matrix Double -> [Int] -> Matrix Double -> Matrix Double -lusR a piv b = lusAux dgetrs "lusR" (fmat a) piv (fmat b) +lusR a piv b = lusAux dgetrs "lusR" (fmat a) piv b -- | Solve a real linear system from a precomputed LU decomposition ('luC'), using LAPACK's /zgetrs/. lusC :: Matrix (Complex Double) -> [Int] -> Matrix (Complex Double) -> Matrix (Complex Double) -lusC a piv b = lusAux zgetrs "lusC" (fmat a) piv (fmat b) +lusC a piv b = lusAux zgetrs "lusC" (fmat a) piv b lusAux f st a piv b | n1==n2 && n2==n =unsafePerformIO $ do -- cgit v1.2.3