gelsy: fix ILAENV workspace query routines for TZRZF/UNMRZ

The workspace NB queries in all four ?gelsy variants used
?GERQF and ?UNMRQ, but the routines actually called at runtime
are ?TZRZF and ?UNMRZ (real) / ?UNMRZ (complex).

While ?GERQF and ?TZRZF are related (both produce an RQ-like
factorization), their block sizes may differ in ILAENV's tuned
values.  If the user relied on LWKOPT from the query to allocate
exactly the right workspace, the actual ?TZRZF/?UNMRZ calls could
underflow or overflow the work array.

Fix the ILAENV calls to match the routines actually invoked:
  ?GERQF -> ?TZRZF
  ?UNMRQ -> ?UNMRZ

Closes #676
This commit is contained in:
Julien Schueller
2026-06-11 16:26:07 +02:00
parent 077667a1be
commit ed7d20cd23
4 changed files with 8 additions and 8 deletions
+2 -2
View File
@@ -266,9 +266,9 @@
*
INFO = 0
NB1 = ILAENV( 1, 'CGEQRF', ' ', M, N, -1, -1 )
NB2 = ILAENV( 1, 'CGERQF', ' ', M, N, -1, -1 )
NB2 = ILAENV( 1, 'CTZRZF', ' ', M, N, -1, -1 )
NB3 = ILAENV( 1, 'CUNMQR', ' ', M, N, NRHS, -1 )
NB4 = ILAENV( 1, 'CUNMRQ', ' ', M, N, NRHS, -1 )
NB4 = ILAENV( 1, 'CUNMRZ', ' ', M, N, NRHS, -1 )
NB = MAX( NB1, NB2, NB3, NB4 )
LWKOPT = MAX( 1, MN+2*N+NB*(N+1), 2*MN+NB*NRHS )
WORK( 1 ) = CMPLX( LWKOPT )
+2 -2
View File
@@ -275,9 +275,9 @@
LWKOPT = 1
ELSE
NB1 = ILAENV( 1, 'DGEQRF', ' ', M, N, -1, -1 )
NB2 = ILAENV( 1, 'DGERQF', ' ', M, N, -1, -1 )
NB2 = ILAENV( 1, 'DTZRZF', ' ', M, N, -1, -1 )
NB3 = ILAENV( 1, 'DORMQR', ' ', M, N, NRHS, -1 )
NB4 = ILAENV( 1, 'DORMRQ', ' ', M, N, NRHS, -1 )
NB4 = ILAENV( 1, 'DORMRZ', ' ', M, N, NRHS, -1 )
NB = MAX( NB1, NB2, NB3, NB4 )
LWKMIN = MN + MAX( 2*MN, N + 1, MN + NRHS )
LWKOPT = MAX( LWKMIN,
+2 -2
View File
@@ -276,9 +276,9 @@
LWKOPT = 1
ELSE
NB1 = ILAENV( 1, 'SGEQRF', ' ', M, N, -1, -1 )
NB2 = ILAENV( 1, 'SGERQF', ' ', M, N, -1, -1 )
NB2 = ILAENV( 1, 'STZRZF', ' ', M, N, -1, -1 )
NB3 = ILAENV( 1, 'SORMQR', ' ', M, N, NRHS, -1 )
NB4 = ILAENV( 1, 'SORMRQ', ' ', M, N, NRHS, -1 )
NB4 = ILAENV( 1, 'SORMRZ', ' ', M, N, NRHS, -1 )
NB = MAX( NB1, NB2, NB3, NB4 )
LWKMIN = MN + MAX( 2*MN, N + 1, MN + NRHS )
LWKOPT = MAX( LWKMIN,
+2 -2
View File
@@ -266,9 +266,9 @@
*
INFO = 0
NB1 = ILAENV( 1, 'ZGEQRF', ' ', M, N, -1, -1 )
NB2 = ILAENV( 1, 'ZGERQF', ' ', M, N, -1, -1 )
NB2 = ILAENV( 1, 'ZTZRZF', ' ', M, N, -1, -1 )
NB3 = ILAENV( 1, 'ZUNMQR', ' ', M, N, NRHS, -1 )
NB4 = ILAENV( 1, 'ZUNMRQ', ' ', M, N, NRHS, -1 )
NB4 = ILAENV( 1, 'ZUNMRZ', ' ', M, N, NRHS, -1 )
NB = MAX( NB1, NB2, NB3, NB4 )
LWKOPT = MAX( 1, MN+2*N+NB*( N+1 ), 2*MN+NB*NRHS )
WORK( 1 ) = DCMPLX( LWKOPT )