From 063ccf0a1d17ed78f527c5b2c6b16ffcdb738588 Mon Sep 17 00:00:00 2001 From: Julien Schueller Date: Sat, 13 Jun 2026 12:52:10 +0200 Subject: [PATCH] *chklq: fix test failures when NB=1 with M=N The LQ test drivers (dchklq, schklq, cchklq, zchklq) called DGELS/SGELS which re-factorizes AF internally using GEQRF when M>=N. This corrupted the LQ factorization expected by subsequent LQT02/LQT03 calls on later K iterations, causing test(1) and test(2) failures. Fix by re-copying A to AF and re-factorizing with GELQF after the GELS call, restoring the LQ factorization for the remaining tests. Closes #973 --- TESTING/LIN/cchklq.f | 11 +++++++++-- TESTING/LIN/dchklq.f | 11 +++++++++-- TESTING/LIN/schklq.f | 11 +++++++++-- TESTING/LIN/zchklq.f | 11 +++++++++-- 4 files changed, 36 insertions(+), 8 deletions(-) diff --git a/TESTING/LIN/cchklq.f b/TESTING/LIN/cchklq.f index c400bdf7b..4cad45861 100644 --- a/TESTING/LIN/cchklq.f +++ b/TESTING/LIN/cchklq.f @@ -395,12 +395,19 @@ SUBROUTINE CCHKLQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, CALL CLACPY( 'Full', M, N, A, LDA, AF, LDA ) * SRNAMT = 'CGELS' - CALL CGELS( 'No transpose', M, N, NRHS, AF, + CALL CGELS( 'No transpose', M, N, NRHS, AF, $ LDA, X, LDA, WORK, LWORK, INFO ) * +* Re-factorize AF with CGELQF for subsequent +* LQ tests which expect LQ factorization in AF. +* + CALL CLACPY( 'Full', M, N, A, LDA, AF, LDA ) + CALL CGELQF( M, N, AF, LDA, TAU, WORK, + $ LWORK, INFO ) +* * Check error code from CGELS. * - IF( INFO.NE.0 ) + IF( INFO.NE.0 ) $ CALL ALAERH( PATH, 'CGELS', INFO, 0, 'N', $ M, N, NRHS, -1, NB, IMAT, $ NFAIL, NERRS, NOUT ) diff --git a/TESTING/LIN/dchklq.f b/TESTING/LIN/dchklq.f index 0b5daca99..acfdab48c 100644 --- a/TESTING/LIN/dchklq.f +++ b/TESTING/LIN/dchklq.f @@ -398,12 +398,19 @@ SUBROUTINE DCHKLQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, CALL DLACPY( 'Full', M, N, A, LDA, AF, LDA ) * SRNAMT = 'DGELS' - CALL DGELS( 'No transpose', M, N, NRHS, AF, + CALL DGELS( 'No transpose', M, N, NRHS, AF, $ LDA, X, LDA, WORK, LWORK, INFO ) * +* Re-factorize AF with DGELQF for subsequent +* LQ tests which expect LQ factorization in AF. +* + CALL DLACPY( 'Full', M, N, A, LDA, AF, LDA ) + CALL DGELQF( M, N, AF, LDA, TAU, WORK, + $ LWORK, INFO ) +* * Check error code from DGELS. * - IF( INFO.NE.0 ) + IF( INFO.NE.0 ) $ CALL ALAERH( PATH, 'DGELS', INFO, 0, 'N', $ M, N, NRHS, -1, NB, IMAT, $ NFAIL, NERRS, NOUT ) diff --git a/TESTING/LIN/schklq.f b/TESTING/LIN/schklq.f index d8be9862b..5fecc1ca6 100644 --- a/TESTING/LIN/schklq.f +++ b/TESTING/LIN/schklq.f @@ -395,12 +395,19 @@ SUBROUTINE SCHKLQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, CALL SLACPY( 'Full', M, N, A, LDA, AF, LDA ) * SRNAMT = 'SGELS' - CALL SGELS( 'No transpose', M, N, NRHS, AF, + CALL SGELS( 'No transpose', M, N, NRHS, AF, $ LDA, X, LDA, WORK, LWORK, INFO ) * +* Re-factorize AF with SGELQF for subsequent +* LQ tests which expect LQ factorization in AF. +* + CALL SLACPY( 'Full', M, N, A, LDA, AF, LDA ) + CALL SGELQF( M, N, AF, LDA, TAU, WORK, + $ LWORK, INFO ) +* * Check error code from SGELS. * - IF( INFO.NE.0 ) + IF( INFO.NE.0 ) $ CALL ALAERH( PATH, 'SGELS', INFO, 0, 'N', $ M, N, NRHS, -1, NB, IMAT, $ NFAIL, NERRS, NOUT ) diff --git a/TESTING/LIN/zchklq.f b/TESTING/LIN/zchklq.f index 7afe70c6c..31a2ee673 100644 --- a/TESTING/LIN/zchklq.f +++ b/TESTING/LIN/zchklq.f @@ -395,12 +395,19 @@ SUBROUTINE ZCHKLQ( DOTYPE, NM, MVAL, NN, NVAL, NNB, NBVAL, NXVAL, CALL ZLACPY( 'Full', M, N, A, LDA, AF, LDA ) * SRNAMT = 'ZGELS' - CALL ZGELS( 'No transpose', M, N, NRHS, AF, + CALL ZGELS( 'No transpose', M, N, NRHS, AF, $ LDA, X, LDA, WORK, LWORK, INFO ) * +* Re-factorize AF with ZGELQF for subsequent +* LQ tests which expect LQ factorization in AF. +* + CALL ZLACPY( 'Full', M, N, A, LDA, AF, LDA ) + CALL ZGELQF( M, N, AF, LDA, TAU, WORK, + $ LWORK, INFO ) +* * Check error code from ZGELS. * - IF( INFO.NE.0 ) + IF( INFO.NE.0 ) $ CALL ALAERH( PATH, 'ZGELS', INFO, 0, 'N', $ M, N, NRHS, -1, NB, IMAT, $ NFAIL, NERRS, NOUT )