Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
xORCSD2BY1, xUNCSD2BY1: fix U2 orthogonality
The xORCSD2BY1/xUNCSD2BY1 output matrix U2 was clearly not
orthogonal/unitary for certain input matrix dimensions m, p, and q
(e.g., m = 260, p=130, q=131). The reason was an accidental overwrite of
data by xORGQR()/xUNGQR() when the WORK array was apparently large
enough to use blocking.
  • Loading branch information
christoph-conrads committed Feb 14, 2021
commit fe3cdc4df77bb1e624284ed0940b094c1dccdb28
5 changes: 4 additions & 1 deletion SRC/cuncsd2by1.f
Original file line number Diff line number Diff line change
Expand Up @@ -711,6 +711,10 @@ SUBROUTINE CUNCSD2BY1( JOBU1, JOBU2, JOBV1T, M, P, Q, X11, LDX11,
*
* Accumulate Householder reflectors
*

IF( WANTU2 .AND. M-P .GT. 0 ) THEN
CALL CCOPY( M-P, WORK(IORBDB+P), 1, U2, 1 )
END IF
IF( WANTU1 .AND. P .GT. 0 ) THEN
CALL CCOPY( P, WORK(IORBDB), 1, U1, 1 )
DO J = 2, P
Expand All @@ -722,7 +726,6 @@ SUBROUTINE CUNCSD2BY1( JOBU1, JOBU2, JOBV1T, M, P, Q, X11, LDX11,
$ WORK(IORGQR), LORGQR, CHILDINFO )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
CALL CCOPY( M-P, WORK(IORBDB+P), 1, U2, 1 )
DO J = 2, M-P
U2(1,J) = ZERO
END DO
Expand Down
4 changes: 3 additions & 1 deletion SRC/dorcsd2by1.f
Original file line number Diff line number Diff line change
Expand Up @@ -674,6 +674,9 @@ SUBROUTINE DORCSD2BY1( JOBU1, JOBU2, JOBV1T, M, P, Q, X11, LDX11,
*
* Accumulate Householder reflectors
*
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
CALL DCOPY( M-P, WORK(IORBDB+P), 1, U2, 1 )
END IF
IF( WANTU1 .AND. P .GT. 0 ) THEN
CALL DCOPY( P, WORK(IORBDB), 1, U1, 1 )
DO J = 2, P
Expand All @@ -685,7 +688,6 @@ SUBROUTINE DORCSD2BY1( JOBU1, JOBU2, JOBV1T, M, P, Q, X11, LDX11,
$ WORK(IORGQR), LORGQR, CHILDINFO )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
CALL DCOPY( M-P, WORK(IORBDB+P), 1, U2, 1 )
DO J = 2, M-P
U2(1,J) = ZERO
END DO
Expand Down
4 changes: 3 additions & 1 deletion SRC/sorcsd2by1.f
Original file line number Diff line number Diff line change
Expand Up @@ -674,6 +674,9 @@ SUBROUTINE SORCSD2BY1( JOBU1, JOBU2, JOBV1T, M, P, Q, X11, LDX11,
*
* Accumulate Householder reflectors
*
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
CALL SCOPY( M-P, WORK(IORBDB+P), 1, U2, 1 )
END IF
IF( WANTU1 .AND. P .GT. 0 ) THEN
CALL SCOPY( P, WORK(IORBDB), 1, U1, 1 )
DO J = 2, P
Expand All @@ -685,7 +688,6 @@ SUBROUTINE SORCSD2BY1( JOBU1, JOBU2, JOBV1T, M, P, Q, X11, LDX11,
$ WORK(IORGQR), LORGQR, CHILDINFO )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
CALL SCOPY( M-P, WORK(IORBDB+P), 1, U2, 1 )
DO J = 2, M-P
U2(1,J) = ZERO
END DO
Expand Down
4 changes: 3 additions & 1 deletion SRC/zuncsd2by1.f
Original file line number Diff line number Diff line change
Expand Up @@ -709,6 +709,9 @@ SUBROUTINE ZUNCSD2BY1( JOBU1, JOBU2, JOBV1T, M, P, Q, X11, LDX11,
*
* Accumulate Householder reflectors
*
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
CALL ZCOPY( M-P, WORK(IORBDB+P), 1, U2, 1 )
END IF
IF( WANTU1 .AND. P .GT. 0 ) THEN
CALL ZCOPY( P, WORK(IORBDB), 1, U1, 1 )
DO J = 2, P
Expand All @@ -720,7 +723,6 @@ SUBROUTINE ZUNCSD2BY1( JOBU1, JOBU2, JOBV1T, M, P, Q, X11, LDX11,
$ WORK(IORGQR), LORGQR, CHILDINFO )
END IF
IF( WANTU2 .AND. M-P .GT. 0 ) THEN
CALL ZCOPY( M-P, WORK(IORBDB+P), 1, U2, 1 )
DO J = 2, M-P
U2(1,J) = ZERO
END DO
Expand Down