From 0904a42fa4be7fdf1ef15e135ff0fd6d3abd5d4b Mon Sep 17 00:00:00 2001 From: Maarten Baert Date: Wed, 25 Jun 2025 15:47:48 +0200 Subject: [PATCH] Fix documentation error and ordering bug in DLASD7 --- lapack-netlib/SRC/dlasd7.f | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/lapack-netlib/SRC/dlasd7.f b/lapack-netlib/SRC/dlasd7.f index ff9ba4c36a..ce3deed63e 100644 --- a/lapack-netlib/SRC/dlasd7.f +++ b/lapack-netlib/SRC/dlasd7.f @@ -101,7 +101,7 @@ *> On entry D contains the singular values of the two submatrices *> to be combined. On exit D contains the trailing (N-K) updated *> singular values (those which were deflated) sorted into -*> increasing order. +*> decreasing order. *> \endverbatim *> *> \param[out] Z @@ -454,7 +454,7 @@ SUBROUTINE DLASD7( ICOMPQ, NL, NR, SQRE, K, D, Z, ZW, VF, VFW, VL, * * Check if singular values are close enough to allow deflation. * - IF( ABS( D( J )-D( JPREV ) ).LE.TOL ) THEN + IF( ( D( J )-D( JPREV ) ).LE.TOL ) THEN * * Deflation is possible. * @@ -490,7 +490,14 @@ SUBROUTINE DLASD7( ICOMPQ, NL, NR, SQRE, K, D, Z, ZW, VF, VFW, VL, CALL DROT( 1, VF( JPREV ), 1, VF( J ), 1, C, S ) CALL DROT( 1, VL( JPREV ), 1, VL( J ), 1, C, S ) K2 = K2 - 1 - IDXP( K2 ) = JPREV +* +* Insert the deflated index in the correct position in IDXP. +* If J - JPREV is greater than 1, the indices in between +* must be shifted to preserve the correct output order. +* + DO 130 JP = JPREV, J - 1 + IDXP( K2 + J - 1 - JP ) = JP + 130 CONTINUE JPREV = J ELSE K = K + 1