summaryrefslogtreecommitdiff
path: root/SRC/dgejsv.f
diff options
context:
space:
mode:
authorjulie <julielangou@users.noreply.github.com>2016-02-23 04:51:38 +0000
committerjulie <julielangou@users.noreply.github.com>2016-02-23 04:51:38 +0000
commit6ffce6670eda0fed216a250724784f7fcb3fce69 (patch)
treec74b0cc3657a03b77c3f0bc787dcec07ad0f0df2 /SRC/dgejsv.f
parente66cd25b911f40d13510159cac54b72dd5efc02e (diff)
downloadlapack-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.f14
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