Fix from Lawrence Mulholland (NAG).
authorlangou <langou@users.noreply.github.com>
Fri, 16 Aug 2013 15:03:03 +0000 (15:03 +0000)
committerlangou <langou@users.noreply.github.com>
Fri, 16 Aug 2013 15:03:03 +0000 (15:03 +0000)
From Lawrence:
The *GEQRT routines are supposed to return immediately when N=0 or M=0.
However the code is such that an INFO = -3 is triggered since we are
trying to satisfy
ELSE IF( NB.LT.1 .OR. NB.GT.MIN(M,N) )THEN
INFO = -3
should be
ELSE IF( NB.LT.1 .OR. ( NB.GT.MIN(M,N) .AND. MIN(M,N).LT.0 ) )THEN
INFO = -3

Also on a side note, I think we could allow NB to be greater than MIN(M,N) in
the interface and then reset NB as needed if the user's NB is too large.
Another day. Good enough for now.

Julien.

SRC/cgeqrt.f
SRC/dgeqrt.f
SRC/sgeqrt.f
SRC/zgeqrt.f

index e1ee0011a1ae74333c03173083c7e7c013f18c18..f8911af2c13c047e8a25c326431d4061689dc331 100644 (file)
          INFO = -1
       ELSE IF( N.LT.0 ) THEN
          INFO = -2
-      ELSE IF( NB.LT.1 .OR. NB.GT.MIN(M,N) ) THEN
+      ELSE IF( NB.LT.1 .OR. ( NB.GT.MIN(M,N) .AND. MIN(M,N).LT.0 ) )THEN
          INFO = -3
       ELSE IF( LDA.LT.MAX( 1, M ) ) THEN
          INFO = -5
index 91dfad1e65fc799c58e1142b850d2c611ef79c7d..961af0321e9cf15195de7eee94df8efc1d4cf940 100644 (file)
          INFO = -1
       ELSE IF( N.LT.0 ) THEN
          INFO = -2
-      ELSE IF( NB.LT.1 .OR. NB.GT.MIN(M,N) ) THEN
+      ELSE IF( NB.LT.1 .OR. ( NB.GT.MIN(M,N) .AND. MIN(M,N).LT.0 ) )THEN
          INFO = -3
       ELSE IF( LDA.LT.MAX( 1, M ) ) THEN
          INFO = -5
index 0efc07b8665636530cfa03c7bd3de7d2a573d41d..2bc3c493bee674b7bee02c643135afdf328842d0 100644 (file)
          INFO = -1
       ELSE IF( N.LT.0 ) THEN
          INFO = -2
-      ELSE IF( NB.LT.1 .OR. NB.GT.MIN(M,N) ) THEN
+      ELSE IF( NB.LT.1 .OR. ( NB.GT.MIN(M,N) .AND. MIN(M,N).LT.0 ) )THEN
          INFO = -3
       ELSE IF( LDA.LT.MAX( 1, M ) ) THEN
          INFO = -5
index 0decf1143454026bf12853d67bbbbeeb59cf405a..934099fd20d3c0534dbcd866da8fb6b47a3f8019 100644 (file)
          INFO = -1
       ELSE IF( N.LT.0 ) THEN
          INFO = -2
-      ELSE IF( NB.LT.1 .OR. NB.GT.MIN(M,N) ) THEN
+      ELSE IF( NB.LT.1 .OR. ( NB.GT.MIN(M,N) .AND. MIN(M,N).LT.0 ) )THEN
          INFO = -3
       ELSE IF( LDA.LT.MAX( 1, M ) ) THEN
          INFO = -5