diff options
author | julie <julielangou@users.noreply.github.com> | 2016-02-23 04:51:38 +0000 |
---|---|---|
committer | julie <julielangou@users.noreply.github.com> | 2016-02-23 04:51:38 +0000 |
commit | 6ffce6670eda0fed216a250724784f7fcb3fce69 (patch) | |
tree | c74b0cc3657a03b77c3f0bc787dcec07ad0f0df2 /SRC/dgejsv.f | |
parent | e66cd25b911f40d13510159cac54b72dd5efc02e (diff) | |
download | lapack-6ffce6670eda0fed216a250724784f7fcb3fce69.tar.gz lapack-6ffce6670eda0fed216a250724784f7fcb3fce69.tar.bz2 lapack-6ffce6670eda0fed216a250724784f7fcb3fce69.zip |
APPLYING INTEL PATCHES sent to Julie on Feb 19th 2016 by Dima from INTEL (dmitry.g.baksheev@intel.com)
Subject: [PATCH 01/42] Fix ?GEJSV: handle M=N=0 case correctly, amend
documentation. ISSUE: need LQUERY
- Complex kind functions operate on complex matrices
- JOBA cannot be 'N', and we have no parameter named JOBE
- Typos like CGEJSV uses CUNMQR, not SUNMQR
- Case M=0 N=0 shall zero IWORK(1:3) and WORK(1:7) anyway (F90 syntax!)
- Comments fixed to not corrupt doxygen output
- Missing fill of IWORK(3) = 0
- Math is written from capital letter :-)
- Typos like use ZGELQF, not ZGELQ
Diffstat (limited to 'SRC/dgejsv.f')
-rw-r--r-- | SRC/dgejsv.f | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/SRC/dgejsv.f b/SRC/dgejsv.f index 66d79bfc..0387ec7d 100644 --- a/SRC/dgejsv.f +++ b/SRC/dgejsv.f @@ -52,7 +52,8 @@ *> are computed and stored in the arrays U and V, respectively. The diagonal *> of [SIGMA] is computed and stored in the array SVA. *> DGEJSV can sometimes compute tiny singular values and their singular vectors much -*> more accurately than other SVD routines, see below under Further Details.*> \endverbatim +*> more accurately than other SVD routines, see below under Further Details. +*> \endverbatim * * Arguments: * ========== @@ -332,10 +333,10 @@ *> If SIGMA and the right singular vectors are needed (JOBV.EQ.'V'), *> -> the minimal requirement is LWORK >= max(2*M+N,4*N+1,7). *> -> For optimal performance, LWORK >= max(2*M+N,3*N+(N+1)*NB,7), -*> where NB is the optimal block size for DGEQP3, DGEQRF, DGELQ, +*> where NB is the optimal block size for DGEQP3, DGEQRF, DGELQF, *> DORMLQ. In general, the optimal length LWORK is computed as *> LWORK >= max(2*M+N,N+LWORK(DGEQP3), N+LWORK(DPOCON), -*> N+LWORK(DGELQ), 2*N+LWORK(DGEQRF), N+LWORK(DORMLQ)). +*> N+LWORK(DGELQF), 2*N+LWORK(DGEQRF), N+LWORK(DORMLQ)). *> *> If SIGMA and the left singular vectors are needed *> -> the minimal requirement is LWORK >= max(2*M+N,4*N+1,7). @@ -589,7 +590,11 @@ * * Quick return for void matrix (Y3K safe) * #:) - IF ( ( M .EQ. 0 ) .OR. ( N .EQ. 0 ) ) RETURN + IF ( ( M .EQ. 0 ) .OR. ( N .EQ. 0 ) ) THEN + IWORK(1:3) = 0 + WORK(1:7) = 0 + RETURN + ENDIF * * Determine whether the matrix U should be M x N or M x M * @@ -715,6 +720,7 @@ IWORK(1) = 0 IWORK(2) = 0 END IF + IWORK(3) = 0 IF ( ERREST ) WORK(3) = ONE IF ( LSVEC .AND. RSVEC ) THEN WORK(4) = ONE |