tags 693269 +patch
severity 693269 important
thanks

On Wed, Nov 14, 2012 at 02:14:53PM -0800, Victor Liu wrote:
> When writing code that uses Lapack as well as threads (pthreads or OpenMP),
> certain routines, like the nonsymmetric eigensolver, produce incorrect results
> due to statically allocated arrays. 

Thanks for filing the bug, I bumped into this last week while packaging
elk (ITP #706538).  I was puzzled at first as elk ships its own set of
blas/lapack routines, and when linking them in, its test suites runs
fine.  However, patching them out and linking to the Debian-provided
blas and lapack libraries resulted in random but significant numerical
errors.

It turned out that elk unconditionally adds -fopenmp to its FFLAGS, so
the blas/lapack routines were compiled like this as well.  This
apparently works around the bug, however, it is probably not the best
(if any) fix.

> The Lapack source uses large local arrays which are deemed by gfortran
> (by default) to be too large to allocate on the stack, leading to
> statically allocated variables which are corrupted when multiple
> threads write to them. Adding the "-frecursive" flag to the
> compilation flags would force gfortran to always allocate the arrays
> on the stack. 

I discussed this with one of the maintainers on IRC this weekend and
they preferred to declare only the problematic routines as RECURSIVE.

> The problem along with code to reproduce it has been listed in this
> forum post:
> http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=2&t=1930

Thanks for your(?) work in
http://icl.cs.utk.edu/lapack-forum/viewtopic.php?f=2&t=1930#p9928 I
created a patch which makes all the subroutines with large local arrays
RECURSIVE.  I can confirm that this fixes the problem for the case of
elk.

I keep the severity at "important" for now, but I consider this a
serious bug which should get fixed in the first squeeze point release.


Michael
--- ./src/cgbtrf.f.orig	2013-05-06 00:43:02.302380624 +0200
+++ ./src/cgbtrf.f	2013-05-06 00:44:23.910803548 +0200
@@ -18,7 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE CGBTRF( M, N, KL, KU, AB, LDAB, IPIV, INFO )
+*       RECURSIVE SUBROUTINE CGBTRF( M, N, KL, KU, AB, LDAB, IPIV,
+*                                    INFO )
 * 
 *       .. Scalar Arguments ..
 *       INTEGER            INFO, KL, KU, LDAB, M, N
@@ -142,7 +143,7 @@
 *> \endverbatim
 *>
 *  =====================================================================
-      SUBROUTINE CGBTRF( M, N, KL, KU, AB, LDAB, IPIV, INFO )
+      RECURSIVE SUBROUTINE CGBTRF( M, N, KL, KU, AB, LDAB, IPIV, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/cgehrd.f.orig	2013-05-06 00:43:02.330380770 +0200
+++ ./src/cgehrd.f	2013-05-06 00:44:48.006928485 +0200
@@ -18,7 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE CGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE CGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, 
+*                                    LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       INTEGER            IHI, ILO, INFO, LDA, LWORK, N
@@ -166,7 +167,8 @@
 *> \endverbatim
 *>
 *  =====================================================================
-      SUBROUTINE CGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE CGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, 
+     $                             LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/cunmlq.f.orig	2013-05-06 00:43:02.342380830 +0200
+++ ./src/cunmlq.f	2013-05-06 00:45:13.531060884 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE CUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE CUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU,
+*                                    C, LDC, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       CHARACTER          SIDE, TRANS
@@ -167,8 +167,8 @@
 *> \ingroup complexOTHERcomputational
 *
 *  =====================================================================
-      SUBROUTINE CUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE CUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C,
+     $                             LDC, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/cunmql.f.orig	2013-05-06 00:43:02.346380852 +0200
+++ ./src/cunmql.f	2013-05-06 00:45:38.595190881 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE CUNMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE CUNMQL( SIDE, TRANS, M, N, K, A, LDA, TAU,
+*                                    C, LDC, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       CHARACTER          SIDE, TRANS
@@ -167,8 +167,8 @@
 *> \ingroup complexOTHERcomputational
 *
 *  =====================================================================
-      SUBROUTINE CUNMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE CUNMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C,
+     $                             LDC, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/cunmqr.f.orig	2013-05-06 00:43:02.354380895 +0200
+++ ./src/cunmqr.f	2013-05-06 00:46:00.215303045 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU,
+*                                    C, LDC, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       CHARACTER          SIDE, TRANS
@@ -167,8 +167,8 @@
 *> \ingroup complexOTHERcomputational
 *
 *  =====================================================================
-      SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE CUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C,
+     $                             LDC, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/cunmrq.f.orig	2013-05-06 00:43:02.358380915 +0200
+++ ./src/cunmrq.f	2013-05-06 00:46:19.227401696 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE CUNMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE CUNMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU,
+*                                    C, LDC, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       CHARACTER          SIDE, TRANS
@@ -167,8 +167,8 @@
 *> \ingroup complexOTHERcomputational
 *
 *  =====================================================================
-      SUBROUTINE CUNMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE CUNMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C,
+     $                             LDC, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/cunmrz.f.orig	2013-05-06 00:43:02.366380963 +0200
+++ ./src/cunmrz.f	2013-05-06 00:47:00.103613938 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE CUNMRZ( SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE CUNMRZ( SIDE, TRANS, M, N, K, L, A, LDA,
+*                                    TAU, C, LDC, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       CHARACTER          SIDE, TRANS
@@ -186,8 +186,8 @@
 *> \endverbatim
 *>
 *  =====================================================================
-      SUBROUTINE CUNMRZ( SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE CUNMRZ( SIDE, TRANS, M, N, K, L, A, LDA, TAU,
+     $                             C, LDC, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/dgbtrf.f.orig	2013-05-06 00:43:02.370380976 +0200
+++ ./src/dgbtrf.f	2013-05-06 00:47:24.251739304 +0200
@@ -18,7 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE DGBTRF( M, N, KL, KU, AB, LDAB, IPIV, INFO )
+*       RECURSIVE SUBROUTINE DGBTRF( M, N, KL, KU, AB, LDAB, IPIV,
+*                                    INFO )
 * 
 *       .. Scalar Arguments ..
 *       INTEGER            INFO, KL, KU, LDAB, M, N
@@ -142,7 +143,7 @@
 *> \endverbatim
 *>
 *  =====================================================================
-      SUBROUTINE DGBTRF( M, N, KL, KU, AB, LDAB, IPIV, INFO )
+      RECURSIVE SUBROUTINE DGBTRF( M, N, KL, KU, AB, LDAB, IPIV, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/dgehrd.f.orig	2013-05-06 00:43:02.374380999 +0200
+++ ./src/dgehrd.f	2013-05-06 00:48:03.159940485 +0200
@@ -18,7 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE DGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE DGEHRD( N, ILO, IHI, A, LDA, TAU, WORK,
+*                                    LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       INTEGER            IHI, ILO, INFO, LDA, LWORK, N
@@ -166,7 +167,8 @@
 *> \endverbatim
 *>
 *  =====================================================================
-      SUBROUTINE DGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE DGEHRD( N, ILO, IHI, A, LDA, TAU, WORK,
+     $                             LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/dormlq.f.orig	2013-05-06 00:43:02.378381025 +0200
+++ ./src/dormlq.f	2013-05-06 00:48:46.296162283 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU,
+*                                    C, LDC, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       CHARACTER          SIDE, TRANS
@@ -166,8 +166,8 @@
 *> \ingroup doubleOTHERcomputational
 *
 *  =====================================================================
-      SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE DORMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C,
+     $                             LDC, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/dormql.f.orig	2013-05-06 00:43:02.378381025 +0200
+++ ./src/dormql.f	2013-05-06 00:49:09.000279167 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE DORMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE DORMQL( SIDE, TRANS, M, N, K, A, LDA, TAU,
+*                                    C, LDC, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       CHARACTER          SIDE, TRANS
@@ -166,8 +166,8 @@
 *> \ingroup doubleOTHERcomputational
 *
 *  =====================================================================
-      SUBROUTINE DORMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE DORMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C,
+     $                             LDC, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/dormqr.f.orig	2013-05-06 00:43:02.386381060 +0200
+++ ./src/dormqr.f	2013-05-06 00:49:28.200378044 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE DORMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE DORMQR( SIDE, TRANS, M, N, K, A, LDA, TAU,
+*                                    C, LDC, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       CHARACTER          SIDE, TRANS
@@ -166,8 +166,8 @@
 *> \ingroup doubleOTHERcomputational
 *
 *  =====================================================================
-      SUBROUTINE DORMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE DORMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C,
+     $                             LDC, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/dormrq.f.orig	2013-05-06 00:43:02.390381086 +0200
+++ ./src/dormrq.f	2013-05-06 00:49:45.356466338 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE DORMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE DORMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU,
+*                                    C, LDC, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       CHARACTER          SIDE, TRANS
@@ -166,8 +166,8 @@
 *> \ingroup doubleOTHERcomputational
 *
 *  =====================================================================
-      SUBROUTINE DORMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE DORMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C,
+     $                             LDC, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/dormrz.f.orig	2013-05-06 00:43:02.390381086 +0200
+++ ./src/dormrz.f	2013-05-06 00:50:09.080588466 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE DORMRZ( SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE DORMRZ( SIDE, TRANS, M, N, K, L, A, LDA,
+*                                    TAU, C, LDC, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       CHARACTER          SIDE, TRANS
@@ -186,8 +186,8 @@
 *> \endverbatim
 *>
 *  =====================================================================
-      SUBROUTINE DORMRZ( SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE DORMRZ( SIDE, TRANS, M, N, K, L, A, LDA, TAU,
+     $                             C, LDC, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/zgbtrf.f.orig	2013-05-06 00:43:02.402381151 +0200
+++ ./src/zgbtrf.f	2013-05-06 00:50:22.912659759 +0200
@@ -18,7 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE ZGBTRF( M, N, KL, KU, AB, LDAB, IPIV, INFO )
+*       RECURSIVE SUBROUTINE ZGBTRF( M, N, KL, KU, AB, LDAB, IPIV, 
+*                                    INFO )
 * 
 *       .. Scalar Arguments ..
 *       INTEGER            INFO, KL, KU, LDAB, M, N
@@ -142,7 +143,7 @@
 *> \endverbatim
 *>
 *  =====================================================================
-      SUBROUTINE ZGBTRF( M, N, KL, KU, AB, LDAB, IPIV, INFO )
+      RECURSIVE SUBROUTINE ZGBTRF( M, N, KL, KU, AB, LDAB, IPIV, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/zgehrd.f.orig	2013-05-06 00:43:02.410381187 +0200
+++ ./src/zgehrd.f	2013-05-06 00:50:47.492786505 +0200
@@ -18,7 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE ZGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE ZGEHRD( N, ILO, IHI, A, LDA, TAU, WORK,
+*                                    LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       INTEGER            IHI, ILO, INFO, LDA, LWORK, N
@@ -166,7 +167,8 @@
 *> \endverbatim
 *>
 *  =====================================================================
-      SUBROUTINE ZGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE ZGEHRD( N, ILO, IHI, A, LDA, TAU, WORK,
+     $                             LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/zhseqr.f.orig	2013-05-06 00:43:02.418381225 +0200
+++ ./src/zhseqr.f	2013-05-06 00:51:10.892907129 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE ZHSEQR( JOB, COMPZ, N, ILO, IHI, H, LDH, W, Z, LDZ,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE ZHSEQR( JOB, COMPZ, N, ILO, IHI, H, LDH, W,
+*                                    Z, LDZ, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       INTEGER            IHI, ILO, INFO, LDH, LDZ, LWORK, N
@@ -296,8 +296,8 @@
 *>       of Matrix Analysis, volume 23, pages 948--973, 2002.
 *
 *  =====================================================================
-      SUBROUTINE ZHSEQR( JOB, COMPZ, N, ILO, IHI, H, LDH, W, Z, LDZ,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE ZHSEQR( JOB, COMPZ, N, ILO, IHI, H, LDH, W,
+     $                             Z, LDZ, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/zunmlq.f.orig	2013-05-06 00:43:02.434381307 +0200
+++ ./src/zunmlq.f	2013-05-06 00:51:36.541039363 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE ZUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE ZUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU,
+*                                    C, LDC, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       CHARACTER          SIDE, TRANS
@@ -166,8 +166,8 @@
 *> \ingroup complex16OTHERcomputational
 *
 *  =====================================================================
-      SUBROUTINE ZUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE ZUNMLQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C,
+     $                             LDC, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/zunmql.f.orig	2013-05-06 00:43:02.446381363 +0200
+++ ./src/zunmql.f	2013-05-06 00:51:56.885144378 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE ZUNMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE ZUNMQL( SIDE, TRANS, M, N, K, A, LDA, TAU,
+*                                    C, LDC, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       CHARACTER          SIDE, TRANS
@@ -166,8 +166,8 @@
 *> \ingroup complex16OTHERcomputational
 *
 *  =====================================================================
-      SUBROUTINE ZUNMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE ZUNMQL( SIDE, TRANS, M, N, K, A, LDA, TAU, C,
+     $                             LDC, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/zunmqr.f.orig	2013-05-06 00:43:02.454381421 +0200
+++ ./src/zunmqr.f	2013-05-06 00:52:16.285244558 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE ZUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE ZUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU,
+*                                    C, LDC, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       CHARACTER          SIDE, TRANS
@@ -166,8 +166,8 @@
 *> \ingroup complex16OTHERcomputational
 *
 *  =====================================================================
-      SUBROUTINE ZUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE ZUNMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C,
+     $                             LDC, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/zunmrq.f.orig	2013-05-06 00:43:02.462381453 +0200
+++ ./src/zunmrq.f	2013-05-06 00:52:49.781417511 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE ZUNMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE ZUNMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU,
+*                                    C, LDC, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       CHARACTER          SIDE, TRANS
@@ -166,8 +166,8 @@
 *> \ingroup complex16OTHERcomputational
 *
 *  =====================================================================
-      SUBROUTINE ZUNMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE ZUNMRQ( SIDE, TRANS, M, N, K, A, LDA, TAU, C,
+     $                             LDC, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
--- ./src/zunmrz.f.orig	2013-05-06 00:43:02.470381498 +0200
+++ ./src/zunmrz.f	2013-05-06 00:53:26.621607788 +0200
@@ -18,8 +18,8 @@
 *  Definition:
 *  ===========
 *
-*       SUBROUTINE ZUNMRZ( SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC,
-*                          WORK, LWORK, INFO )
+*       RECURSIVE SUBROUTINE ZUNMRZ( SIDE, TRANS, M, N, K, L, A, LDA,
+*                                    TAU, C, LDC, WORK, LWORK, INFO )
 * 
 *       .. Scalar Arguments ..
 *       CHARACTER          SIDE, TRANS
@@ -186,8 +186,8 @@
 *> \endverbatim
 *>
 *  =====================================================================
-      SUBROUTINE ZUNMRZ( SIDE, TRANS, M, N, K, L, A, LDA, TAU, C, LDC,
-     $                   WORK, LWORK, INFO )
+      RECURSIVE SUBROUTINE ZUNMRZ( SIDE, TRANS, M, N, K, L, A, LDA, TAU,
+     $                             C, LDC, WORK, LWORK, INFO )
 *
 *  -- LAPACK computational routine (version 3.4.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --

Reply via email to