# HG changeset patch # User John W. Eaton # Date 1203119745 18000 # Node ID 74de76325d12d856b3a18f4d7d56cfd11e7a4cbd # Parent a8e0f7184a594defad43201fedfc4311b298cf8c more xGELSD workspace fixes diff -r a8e0f7184a59 -r 74de76325d12 liboctave/CMatrix.cc --- a/liboctave/CMatrix.cc Fri Feb 15 16:50:16 2008 -0500 +++ b/liboctave/CMatrix.cc Fri Feb 15 18:55:45 2008 -0500 @@ -2507,6 +2507,13 @@ F77_CHAR_ARG_LEN (6) F77_CHAR_ARG_LEN (1)); + octave_idx_type mnthr; + F77_FUNC (xilaenv, XILAENV) (6, F77_CONST_CHAR_ARG2 ("ZGELSD", 6), + F77_CONST_CHAR_ARG2 (" ", 1), + m, n, nrhs, -1, mnthr + F77_CHAR_ARG_LEN (6) + F77_CHAR_ARG_LEN (1)); + // We compute the size of rwork and iwork because ZGELSD in // older versions of LAPACK does not return them on a query // call. @@ -2539,10 +2546,10 @@ lwork, prwork, piwork, info)); // The workspace query is broken in at least LAPACK 3.0.0 - // through 3.1.1 when n > m. The obtuse formula below - // should provide sufficient workspace for DGELSD to operate + // through 3.1.1 when n > mnthr. The obtuse formula below + // should provide sufficient workspace for ZGELSD to operate // efficiently. - if (n > m) + if (n > mnthr) { octave_idx_type addend = m; diff -r a8e0f7184a59 -r 74de76325d12 liboctave/ChangeLog --- a/liboctave/ChangeLog Fri Feb 15 16:50:16 2008 -0500 +++ b/liboctave/ChangeLog Fri Feb 15 18:55:45 2008 -0500 @@ -1,3 +1,9 @@ +2008-02-15 John W. Eaton + + * dMatrix.cc (Matrix::lssolve): Check n > mnthr, not n > m when + deciding whether to calculate workspace size, with mnthr from ILAENV. + * CMatrix.cc (ComplexMatrix::lssolve): Likewise. + 2008-02-12 John W. Eaton * CMatrix.cc: Declare xilaenv instead of ilaenv. diff -r a8e0f7184a59 -r 74de76325d12 liboctave/dMatrix.cc --- a/liboctave/dMatrix.cc Fri Feb 15 16:50:16 2008 -0500 +++ b/liboctave/dMatrix.cc Fri Feb 15 18:55:45 2008 -0500 @@ -2118,6 +2118,13 @@ F77_CHAR_ARG_LEN (6) F77_CHAR_ARG_LEN (1)); + octave_idx_type mnthr; + F77_FUNC (xilaenv, XILAENV) (6, F77_CONST_CHAR_ARG2 ("DGELSD", 6), + F77_CONST_CHAR_ARG2 (" ", 1), + m, n, nrhs, -1, mnthr + F77_CHAR_ARG_LEN (6) + F77_CHAR_ARG_LEN (1)); + // We compute the size of iwork because DGELSD in older versions // of LAPACK does not return it on a query call. double dminmn = static_cast (minmn); @@ -2142,10 +2149,10 @@ lwork, piwork, info)); // The workspace query is broken in at least LAPACK 3.0.0 - // through 3.1.1 when n > m. The obtuse formula below + // through 3.1.1 when n > mnthr. The obtuse formula below // should provide sufficient workspace for DGELSD to operate // efficiently. - if (n > m) + if (n > mnthr) { const octave_idx_type wlalsd = 9*m + 2*m*smlsiz + 8*m*nlvl + m*nrhs + (smlsiz+1)*(smlsiz+1);