Merge branch 'master' of https://github.com/Reference-LAPACK/lapack
authorJulien Langou <julien.langou@ucdenver.edu>
Thu, 23 Mar 2017 19:56:18 +0000 (15:56 -0400)
committerJulien Langou <julien.langou@ucdenver.edu>
Thu, 23 Mar 2017 19:56:18 +0000 (15:56 -0400)
82 files changed:
.gitignore
BLAS/Makefile [new file with mode: 0644]
BLAS/SRC/Makefile
BLAS/TESTING/Makefile
CBLAS/Makefile
CBLAS/examples/Makefile
CBLAS/src/Makefile
CBLAS/testing/CMakeLists.txt
CBLAS/testing/Makefile
DOCS/lawn81.tex
INSTALL/Makefile
LAPACKE/Makefile
LAPACKE/example/Makefile
LAPACKE/src/Makefile
LAPACKE/utils/Makefile
Makefile
README.md
SRC/Makefile
SRC/VARIANTS/Makefile
SRC/VARIANTS/README
SRC/cgelqt.f
SRC/cgelqt3.f
SRC/cgemlqt.f
SRC/cgeqrt.f
SRC/cgetsls.f
SRC/chbev_2stage.f
SRC/chetrs_aa.f
SRC/clamswlq.f
SRC/clamtsqr.f
SRC/claswlq.f
SRC/claswp.f
SRC/csytrs_aa.f
SRC/ctplqt.f
SRC/ctplqt2.f
SRC/ctpmlqt.f
SRC/dgelqt.f
SRC/dgelqt3.f
SRC/dgemlqt.f
SRC/dgeqrt.f
SRC/dlamswlq.f
SRC/dlamtsqr.f
SRC/dlaswlq.f
SRC/dlaswp.f
SRC/dsbev_2stage.f
SRC/dsytrs_aa.f
SRC/dtplqt.f
SRC/dtplqt2.f
SRC/sgelqt.f
SRC/sgelqt3.f
SRC/sgemlqt.f
SRC/sgeqrt.f
SRC/slamswlq.f
SRC/slamtsqr.f
SRC/slaswlq.f
SRC/slaswp.f
SRC/ssbev_2stage.f
SRC/ssytrs_aa.f
SRC/stplqt.f
SRC/stplqt2.f
SRC/zgelqt.f
SRC/zgelqt3.f
SRC/zgemlqt.f
SRC/zgeqrt.f
SRC/zgetsls.f
SRC/zhbev_2stage.f
SRC/zhetrs_aa.f
SRC/zlamswlq.f
SRC/zlamtsqr.f
SRC/zlaswlq.f
SRC/zlaswp.f
SRC/zsytrs_aa.f
SRC/ztplqt.f
SRC/ztplqt2.f
SRC/ztpmlqt.f
SRC/ztrevc3.f
TESTING/EIG/Makefile
TESTING/EIG/zchkhb2stg.f
TESTING/EIG/zdrvst2stg.f
TESTING/EIG/zerrst.f
TESTING/LIN/Makefile
TESTING/MATGEN/Makefile
TESTING/Makefile

index 1e3c726..05b8c7f 100644 (file)
@@ -23,7 +23,8 @@ CBLAS/examples/cblas_ex1
 CBLAS/examples/cblas_ex2
 
 # LAPACK testing
-TESTING/x*
+TESTING/LIN/xlintst*
+TESTING/EIG/xeigtst*
 TESTING/*.out
 TESTING/*.txt
 
diff --git a/BLAS/Makefile b/BLAS/Makefile
new file mode 100644 (file)
index 0000000..f9c4b53
--- /dev/null
@@ -0,0 +1,22 @@
+include ../make.inc
+
+all: blas
+
+blas:
+       $(MAKE) -C SRC
+
+blas_testing: blas
+       $(MAKE) -C TESTING run
+
+clean:
+       $(MAKE) -C SRC clean
+       $(MAKE) -C TESTING clean
+cleanobj:
+       $(MAKE) -C SRC cleanobj
+       $(MAKE) -C TESTING cleanobj
+cleanlib:
+       $(MAKE) -C SRC cleanlib
+cleanexe:
+       $(MAKE) -C TESTING cleanexe
+cleantest:
+       $(MAKE) -C TESTING cleantest
index 47a1582..a436365 100644 (file)
@@ -42,7 +42,7 @@ include ../../make.inc
 #  top-level make.inc
 #
 #  To remove the object files after the library is created, enter
-#       make clean
+#       make cleanobj
 #  To force the source files to be recompiled, enter, for example,
 #       make single FRC=FRC
 #
@@ -138,34 +138,33 @@ ALLOBJ = $(SBLAS1) $(SBLAS2) $(SBLAS3) $(DBLAS1) $(DBLAS2) $(DBLAS3) \
        $(ZBLAS2) $(ZBLAS3) $(ALLBLAS)
 
 $(BLASLIB): $(ALLOBJ)
-       $(ARCH) $(ARCHFLAGS) $@ $(ALLOBJ)
+       $(ARCH) $(ARCHFLAGS) $@ $^
        $(RANLIB) $@
 
 single: $(SBLAS1) $(ALLBLAS) $(SBLAS2) $(SBLAS3)
-       $(ARCH) $(ARCHFLAGS) $(BLASLIB) $(SBLAS1) $(ALLBLAS) \
-       $(SBLAS2) $(SBLAS3)
+       $(ARCH) $(ARCHFLAGS) $(BLASLIB) $^
        $(RANLIB) $(BLASLIB)
 
 double: $(DBLAS1) $(ALLBLAS) $(DBLAS2) $(DBLAS3)
-       $(ARCH) $(ARCHFLAGS) $(BLASLIB) $(DBLAS1) $(ALLBLAS) \
-       $(DBLAS2) $(DBLAS3)
+       $(ARCH) $(ARCHFLAGS) $(BLASLIB) $^
        $(RANLIB) $(BLASLIB)
 
 complex: $(CBLAS1) $(CB1AUX) $(ALLBLAS) $(CBLAS2) $(CBLAS3)
-       $(ARCH) $(ARCHFLAGS) $(BLASLIB) $(CBLAS1) $(CB1AUX) \
-       $(ALLBLAS) $(CBLAS2) $(CBLAS3)
+       $(ARCH) $(ARCHFLAGS) $(BLASLIB) $^
        $(RANLIB) $(BLASLIB)
 
 complex16: $(ZBLAS1) $(ZB1AUX) $(ALLBLAS) $(ZBLAS2) $(ZBLAS3)
-       $(ARCH) $(ARCHFLAGS) $(BLASLIB) $(ZBLAS1) $(ZB1AUX) \
-       $(ALLBLAS) $(ZBLAS2) $(ZBLAS3)
+       $(ARCH) $(ARCHFLAGS) $(BLASLIB) $^
        $(RANLIB) $(BLASLIB)
 
 FRC:
        @FRC=$(FRC)
 
-clean:
+clean: cleanobj cleanlib
+cleanobj:
        rm -f *.o
+cleanlib:
+       #rm -f $(BLASLIB)  # May point to a system lib, e.g. -lblas
 
 .f.o:
        $(FORTRAN) $(OPTS) -c -o $@ $<
index 5cf7db4..97150b1 100644 (file)
@@ -6,32 +6,32 @@ double:    xblat1d xblat2d xblat3d
 complex:   xblat1c xblat2c xblat3c
 complex16: xblat1z xblat2z xblat3z
 
-xblat1s: sblat1.o
-       $(LOADER) $(LOADOPTS) -o $@ sblat1.o $(BLASLIB)
-xblat1d: dblat1.o
-       $(LOADER) $(LOADOPTS) -o $@ dblat1.o $(BLASLIB)
-xblat1c: cblat1.o
-       $(LOADER) $(LOADOPTS) -o $@ cblat1.o $(BLASLIB)
-xblat1z: zblat1.o
-       $(LOADER) $(LOADOPTS) -o $@ zblat1.o $(BLASLIB)
+xblat1s: sblat1.o $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xblat1d: dblat1.o $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xblat1c: cblat1.o $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xblat1z: zblat1.o $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
-xblat2s: sblat2.o
-       $(LOADER) $(LOADOPTS) -o $@ sblat2.o $(BLASLIB)
-xblat2d: dblat2.o
-       $(LOADER) $(LOADOPTS) -o $@ dblat2.o $(BLASLIB)
-xblat2c: cblat2.o
-       $(LOADER) $(LOADOPTS) -o $@ cblat2.o $(BLASLIB)
-xblat2z: zblat2.o
-       $(LOADER) $(LOADOPTS) -o $@ zblat2.o $(BLASLIB)
+xblat2s: sblat2.o $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xblat2d: dblat2.o $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xblat2c: cblat2.o $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xblat2z: zblat2.o $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
-xblat3s: sblat3.o
-       $(LOADER) $(LOADOPTS) -o $@ sblat3.o $(BLASLIB)
-xblat3d: dblat3.o
-       $(LOADER) $(LOADOPTS) -o $@ dblat3.o $(BLASLIB)
-xblat3c: cblat3.o
-       $(LOADER) $(LOADOPTS) -o $@ cblat3.o $(BLASLIB)
-xblat3z: zblat3.o
-       $(LOADER) $(LOADOPTS) -o $@ zblat3.o $(BLASLIB)
+xblat3s: sblat3.o $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xblat3d: dblat3.o $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xblat3c: cblat3.o $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xblat3z: zblat3.o $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
 run: all
        ./xblat1s > sblat1.out
@@ -47,8 +47,13 @@ run: all
        ./xblat3c < cblat3.in
        ./xblat3z < zblat3.in
 
-clean:
-       rm -f *.o xblat* *.out
+clean: cleanobj cleanexe cleantest
+cleanobj:
+       rm -f *.o
+cleanexe:
+       rm -f xblat*
+cleantest:
+       rm -f *.out core
 
 .f.o:
        $(FORTRAN) $(OPTS) -c -o $@ $<
index 3ba1f71..513e8fc 100644 (file)
@@ -1,27 +1,31 @@
 include ../make.inc
 
-all:
-       cd include && cp cblas_mangling_with_flags.h.in cblas_mangling.h
-       cd src && $(MAKE) all
+all: cblas
 
+cblas: include/cblas_mangling.h
+       $(MAKE) -C src
 
-clean: cleanlib
+include/cblas_mangling.h: include/cblas_mangling_with_flags.h.in
+       cp $< $@
 
-cleanlib:
-       cd src && $(MAKE) clean
-
-cleanexe:
-       cd testing && $(MAKE) cleanexe
-
-cleanall: clean cleanexe
-       cd src && $(MAKE) cleanall
-       cd examples && $(MAKE) cleanall
+cblas_testing: cblas
+       $(MAKE) -C testing run
 
-cblas_testing:
-       cd testing && $(MAKE) all
+cblas_example: cblas
+       $(MAKE) -C examples
 
-runtst:
-       cd testing && $(MAKE) run
-
-example: all
-       cd examples && $(MAKE) all
+clean:
+       $(MAKE) -C src clean
+       $(MAKE) -C testing clean
+       $(MAKE) -C examples clean
+cleanobj:
+       $(MAKE) -C src cleanobj
+       $(MAKE) -C testing cleanobj
+       $(MAKE) -C examples cleanobj
+cleanlib:
+       $(MAKE) -C src cleanlib
+cleanexe:
+       $(MAKE) -C testing cleanexe
+       $(MAKE) -C examples cleanexe
+cleantest:
+       $(MAKE) -C testing cleantest
index ded5ed9..664b8bc 100644 (file)
@@ -2,13 +2,16 @@ include ../../make.inc
 
 all: cblas_ex1 cblas_ex2
 
-cblas_ex1: cblas_example1.o
-       $(LOADER) $(LOADOPTS) -o $@ cblas_example1.o $(CBLASLIB) $(BLASLIB)
-cblas_ex2: cblas_example2.o
-       $(LOADER) $(LOADOPTS) -o $@ cblas_example2.o $(CBLASLIB) $(BLASLIB)
+cblas_ex1: cblas_example1.o $(CBLASLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+cblas_ex2: cblas_example2.o $(CBLASLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
-cleanall:
-       rm -f *.o cblas_ex1 cblas_ex2
+clean: cleanobj cleanexe
+cleanobj:
+       rm -f *.o
+cleanexe:
+       rm -f cblas_ex1 cblas_ex2
 
 .c.o:
        $(CC) $(CFLAGS) -I../include -c -o $@ $<
index 660c620..6c0518a 100644 (file)
@@ -45,22 +45,22 @@ sclev1 = cblas_scasum.o scasumsub.o cblas_scnrm2.o scnrm2sub.o
 
 # Single precision real
 slib1: $(slev1) $(sclev1)
-       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $(slev1) $(sclev1)
+       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $^
        $(RANLIB) $(CBLASLIB)
 
 # Double precision real
 dlib1: $(dlev1)
-       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $(dlev1)
+       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $^
        $(RANLIB) $(CBLASLIB)
 
 # Single precision complex
 clib1: $(clev1) $(sclev1)
-       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $(clev1) $(sclev1)
+       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $^
        $(RANLIB) $(CBLASLIB)
 
 # Double precision complex
 zlib1: $(zlev1)
-       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $(zlev1)
+       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $^
        $(RANLIB) $(CBLASLIB)
 
 #
@@ -97,22 +97,22 @@ zlev2 = cblas_zgemv.o cblas_zgbmv.o cblas_zhemv.o cblas_zhbmv.o cblas_zhpmv.o \
 
 # Single precision real
 slib2: $(slev2) $(errhand)
-       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $(slev2) $(errhand)
+       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $^
        $(RANLIB) $(CBLASLIB)
 
 # Double precision real
 dlib2: $(dlev2) $(errhand)
-       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $(dlev2) $(errhand)
+       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $^
        $(RANLIB) $(CBLASLIB)
 
 # Single precision complex
 clib2: $(clev2) $(errhand)
-       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $(clev2) $(errhand)
+       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $^
        $(RANLIB) $(CBLASLIB)
 
 # Double precision complex
 zlib2: $(zlev2) $(errhand)
-       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $(zlev2) $(errhand)
+       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $^
        $(RANLIB) $(CBLASLIB)
 
 #
@@ -143,22 +143,22 @@ zlev3 = cblas_zgemm.o cblas_zsymm.o cblas_zhemm.o cblas_zherk.o \
 
 # Single precision real
 slib3: $(slev3) $(errhand)
-       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $(slev3) $(errhand)
+       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $^
        $(RANLIB) $(CBLASLIB)
 
 # Double precision real
 dlib3: $(dlev3) $(errhand)
-       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $(dlev3) $(errhand)
+       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $^
        $(RANLIB) $(CBLASLIB)
 
 # Single precision complex
 clib3: $(clev3) $(errhand)
-       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $(clev3) $(errhand)
+       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $^
        $(RANLIB) $(CBLASLIB)
 
 # Double precision complex
 zlib3: $(zlev3) $(errhand)
-       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $(zlev3) $(errhand)
+       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $^
        $(RANLIB) $(CBLASLIB)
 
 
@@ -168,34 +168,34 @@ alev3 = $(slev3) $(dlev3) $(clev3) $(zlev3)
 
 # All level 1
 all1: $(alev1)
-       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $(alev1)
+       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $^
        $(RANLIB) $(CBLASLIB)
 
 # All level 2
 all2: $(alev2) $(errhand)
-       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $(alev2) $(errhand)
+       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $^
        $(RANLIB) $(CBLASLIB)
 
 # All level 3
 all3: $(alev3) $(errhand)
-       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $(alev3) $(errhand)
+       $(ARCH) $(ARCHFLAGS) $(CBLASLIB) $^
        $(RANLIB) $(CBLASLIB)
 
 # All levels and precisions
 $(CBLASLIB): $(alev1) $(alev2) $(alev3) $(errhand)
-       $(ARCH) $(ARCHFLAGS) $@ $(alev1) $(alev2) $(alev3) $(errhand)
+       $(ARCH) $(ARCHFLAGS) $@ $^
        $(RANLIB) $@
 
 FRC:
        @FRC=$(FRC)
 
-clean:
-       rm -f *.o a.out core
-cleanall:
+clean: cleanobj cleanlib
+cleanobj:
+       rm -f *.o
+cleanlib:
        rm -f $(CBLASLIB)
 
 .c.o:
        $(CC) $(CFLAGS) -I../include -c -o $@ $<
-
 .f.o:
        $(FORTRAN) $(OPTS) -c -o $@ $<
index eb32e73..2459695 100644 (file)
@@ -25,22 +25,22 @@ macro(add_cblas_test output input target)
 endmacro()
 
 
-# Object files for single real precision
+# Object files for single precision real
 set(STESTL1O c_sblas1.c)
 set(STESTL2O c_sblas2.c c_s2chke.c auxiliary.c c_xerbla.c)
 set(STESTL3O c_sblas3.c c_s3chke.c auxiliary.c c_xerbla.c)
 
-# Object files for double real precision
+# Object files for double precision real
 set(DTESTL1O c_dblas1.c)
 set(DTESTL2O c_dblas2.c c_d2chke.c auxiliary.c c_xerbla.c)
 set(DTESTL3O c_dblas3.c c_d3chke.c auxiliary.c c_xerbla.c)
 
-# Object files for single complex precision
+# Object files for single precision complex
 set(CTESTL1O c_cblat1.f c_cblas1.c)
 set(CTESTL2O c_cblas2.c c_c2chke.c auxiliary.c c_xerbla.c)
 set(CTESTL3O c_cblas3.c c_c3chke.c auxiliary.c c_xerbla.c)
 
-# Object files for double complex precision
+# Object files for double precision complex
 set(ZTESTL1O c_zblas1.c)
 set(ZTESTL2O c_zblas2.c c_z2chke.c auxiliary.c c_xerbla.c)
 set(ZTESTL3O c_zblas3.c c_z3chke.c auxiliary.c c_xerbla.c)
index a5a0783..0182c3e 100644 (file)
@@ -7,120 +7,104 @@ include ../../make.inc
 # Archive files necessary to compile
 LIB = $(CBLASLIB) $(BLASLIB)
 
-# Object files for single real precision
+# Object files for single precision real
 stestl1o = c_sblas1.o
 stestl2o = c_sblas2.o c_s2chke.o auxiliary.o c_xerbla.o
 stestl3o = c_sblas3.o c_s3chke.o auxiliary.o c_xerbla.o
 
-# Object files for double real precision
+# Object files for double precision real
 dtestl1o = c_dblas1.o
 dtestl2o = c_dblas2.o c_d2chke.o auxiliary.o c_xerbla.o
 dtestl3o = c_dblas3.o c_d3chke.o auxiliary.o c_xerbla.o
 
-# Object files for single complex precision
+# Object files for single precision complex
 ctestl1o = c_cblas1.o
 ctestl2o = c_cblas2.o c_c2chke.o auxiliary.o c_xerbla.o
 ctestl3o = c_cblas3.o c_c3chke.o auxiliary.o c_xerbla.o
 
-# Object files for double complex precision
+# Object files for double precision complex
 ztestl1o = c_zblas1.o
 ztestl2o = c_zblas2.o c_z2chke.o auxiliary.o c_xerbla.o
 ztestl3o = c_zblas3.o c_z3chke.o auxiliary.o c_xerbla.o
 
 all: all1 all2 all3
-all1: stest1 dtest1 ctest1 ztest1
-all2: stest2 dtest2 ctest2 ztest2
-all3: stest3 dtest3 ctest3 ztest3
-
-clean:
-       rm -f core *.o *.out x*
-cleanobj:
-       rm -f core *.o a.out
-cleanexe:
-       rm -f x*
-
-stest1: xscblat1
-dtest1: xdcblat1
-ctest1: xccblat1
-ztest1: xzcblat1
-
-stest2: xscblat2
-dtest2: xdcblat2
-ctest2: xccblat2
-ztest2: xzcblat2
-
-stest3: xscblat3
-dtest3: xdcblat3
-ctest3: xccblat3
-ztest3: xzcblat3
+all1: xscblat1 xdcblat1 xccblat1 xzcblat1
+all2: xscblat2 xdcblat2 xccblat2 xzcblat2
+all3: xscblat3 xdcblat3 xccblat3 xzcblat3
 
 #
 # Compile each precision
 #
 
 # Single real
-xscblat1: $(stestl1o) c_sblat1.o
-       $(LOADER) $(LOADOPTS) -o $@ c_sblat1.o $(stestl1o) $(LIB)
-xscblat2: $(stestl2o) c_sblat2.o
-       $(LOADER) $(LOADOPTS) -o $@ c_sblat2.o $(stestl2o) $(LIB)
-xscblat3: $(stestl3o) c_sblat3.o
-       $(LOADER) $(LOADOPTS) -o $@ c_sblat3.o $(stestl3o) $(LIB)
+xscblat1: c_sblat1.o $(stestl1o) $(LIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xscblat2: c_sblat2.o $(stestl2o) $(LIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xscblat3: c_sblat3.o $(stestl3o) $(LIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 # Double real
-xdcblat1: $(dtestl1o) c_dblat1.o
-       $(LOADER) $(LOADOPTS) -o $@ c_dblat1.o $(dtestl1o) $(LIB)
-xdcblat2: $(dtestl2o) c_dblat2.o
-       $(LOADER) $(LOADOPTS) -o $@ c_dblat2.o $(dtestl2o) $(LIB)
-xdcblat3: $(dtestl3o) c_dblat3.o
-       $(LOADER) $(LOADOPTS) -o $@ c_dblat3.o $(dtestl3o) $(LIB)
+xdcblat1: c_dblat1.o $(dtestl1o) $(LIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xdcblat2: c_dblat2.o $(dtestl2o) $(LIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xdcblat3: c_dblat3.o $(dtestl3o) $(LIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
 # Single complex
-xccblat1: $(ctestl1o) c_cblat1.o
-       $(LOADER) $(LOADOPTS) -o $@ c_cblat1.o $(ctestl1o) $(LIB)
-xccblat2: $(ctestl2o) c_cblat2.o
-       $(LOADER) $(LOADOPTS) -o $@ c_cblat2.o $(ctestl2o) $(LIB)
-xccblat3: $(ctestl3o) c_cblat3.o
-       $(LOADER) $(LOADOPTS) -o $@ c_cblat3.o $(ctestl3o) $(LIB)
+xccblat1: c_cblat1.o $(ctestl1o) $(LIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xccblat2: c_cblat2.o $(ctestl2o) $(LIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xccblat3: c_cblat3.o $(ctestl3o) $(LIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
 # Double complex
-xzcblat1: $(ztestl1o) c_zblat1.o
-       $(LOADER) $(LOADOPTS) -o $@ c_zblat1.o $(ztestl1o) $(LIB)
-xzcblat2: $(ztestl2o) c_zblat2.o
-       $(LOADER) $(LOADOPTS) -o $@ c_zblat2.o $(ztestl2o) $(LIB)
-xzcblat3: $(ztestl3o) c_zblat3.o
-       $(LOADER) $(LOADOPTS) -o $@ c_zblat3.o $(ztestl3o) $(LIB)
+xzcblat1: c_zblat1.o $(ztestl1o) $(LIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xzcblat2: c_zblat2.o $(ztestl2o) $(LIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
+xzcblat3: c_zblat3.o $(ztestl3o) $(LIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
 
 # RUN TESTS
-run:
-       @echo "--> TESTING CBLAS 1 - SINGLE PRECISION <--"
+run: all
+       @echo "--> TESTING CBLAS 1 - SINGLE PRECISION REAL <--"
        @./xscblat1 > stest1.out
-       @echo "--> TESTING CBLAS 1 - DOUBLE PRECISION <--"
+       @echo "--> TESTING CBLAS 1 - DOUBLE PRECISION REAL <--"
        @./xdcblat1 > dtest1.out
-       @echo "--> TESTING CBLAS 1 - COMPLEX PRECISION <--"
+       @echo "--> TESTING CBLAS 1 - SINGLE PRECISION COMPLEX <--"
        @./xccblat1 > ctest1.out
-       @echo "--> TESTING CBLAS 1 - DOUBLE COMPLEX PRECISION <--"
+       @echo "--> TESTING CBLAS 1 - DOUBLE PRECISION COMPLEX <--"
        @./xzcblat1 > ztest1.out
-       @echo "--> TESTING CBLAS 2 - SINGLE PRECISION <--"
+       @echo "--> TESTING CBLAS 2 - SINGLE PRECISION REAL <--"
        @./xscblat2 < sin2 > stest2.out
-       @echo "--> TESTING CBLAS 2 - DOUBLE PRECISION <--"
+       @echo "--> TESTING CBLAS 2 - DOUBLE PRECISION REAL <--"
        @./xdcblat2 < din2 > dtest2.out
-       @echo "--> TESTING CBLAS 2 - COMPLEX PRECISION <--"
+       @echo "--> TESTING CBLAS 2 - SINGLE PRECISION COMPLEX <--"
        @./xccblat2 < cin2 > ctest2.out
-       @echo "--> TESTING CBLAS 2 - DOUBLE COMPLEX PRECISION <--"
+       @echo "--> TESTING CBLAS 2 - DOUBLE PRECISION COMPLEX <--"
        @./xzcblat2 < zin2 > ztest2.out
-       @echo "--> TESTING CBLAS 3 - SINGLE PRECISION <--"
+       @echo "--> TESTING CBLAS 3 - SINGLE PRECISION REAL <--"
        @./xscblat3 < sin3 > stest3.out
-       @echo "--> TESTING CBLAS 3 - DOUBLE PRECISION <--"
+       @echo "--> TESTING CBLAS 3 - DOUBLE PRECISION REAL <--"
        @./xdcblat3 < din3 > dtest3.out
-       @echo "--> TESTING CBLAS 3 - COMPLEX PRECISION <--"
+       @echo "--> TESTING CBLAS 3 - SINGLE PRECISION COMPLEX <--"
        @./xccblat3 < cin3 > ctest3.out
-       @echo "--> TESTING CBLAS 3 - DOUBLE COMPLEX PRECISION <--"
+       @echo "--> TESTING CBLAS 3 - DOUBLE PRECISION COMPLEX <--"
        @./xzcblat3 < zin3 > ztest3.out
 
-.SUFFIXES: .o .f .c
+clean: cleanobj cleanexe cleantest
+cleanobj:
+       rm -f *.o
+cleanexe:
+       rm -f x*
+cleantest:
+       rm -f *.out core
 
+.SUFFIXES: .o .f .c
 .c.o:
        $(CC) $(CFLAGS) -I../include -c -o $@ $<
-
 .f.o:
        $(FORTRAN) $(OPTS) -c -o $@ $<
index 73a4437..2917352 100644 (file)
@@ -507,7 +507,7 @@ LAPACK library, you would modify the \texttt{lapacklib} definition to be:
 
 \begin{verbatim}
 lapacklib:
-        ( cd SRC; $(MAKE) single )
+        $(MAKE) -C SRC single
 \end{verbatim}
 
 Likewise, you could specify \texttt{double, complex, or complex16} to
@@ -560,7 +560,7 @@ can be accomplished by the following:
 
 \begin{list}{}{}
 \item \texttt{cd LAPACK}
-\item \texttt{make clean}
+\item \texttt{make cleanobj}
 \end{list}
 
 \section{Further Details of the Installation Process}\label{furtherdetails}
index 51b15de..150a061 100644 (file)
@@ -2,33 +2,28 @@ include ../make.inc
 
 all: testlsame testslamch testdlamch testsecond testdsecnd testieee testversion
 
-clean:
-       rm -f *.o
-cleanall:
-       rm -f test*
-
 testlsame: lsame.o lsametst.o
-       $(LOADER) $(LOADOPTS) -o $@ lsame.o lsametst.o
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
 testslamch: slamch.o lsame.o slamchtst.o
-       $(LOADER) $(LOADOPTS) -o $@ slamch.o lsame.o slamchtst.o
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
 testdlamch: dlamch.o lsame.o dlamchtst.o
-       $(LOADER) $(LOADOPTS) -o $@ dlamch.o lsame.o dlamchtst.o
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
 testsecond: second_$(TIMER).o secondtst.o
        @echo "[INFO] : TIMER value: $(TIMER) (given by make.inc)"
-       $(LOADER) $(LOADOPTS) -o $@ second_$(TIMER).o secondtst.o
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
 testdsecnd: dsecnd_$(TIMER).o dsecndtst.o
        @echo "[INFO] : TIMER value: $(TIMER) (given by make.inc)"
-       $(LOADER) $(LOADOPTS) -o $@ dsecnd_$(TIMER).o dsecndtst.o
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
 testieee: tstiee.o
-       $(LOADER) $(LOADOPTS) -o $@ tstiee.o
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
 testversion: ilaver.o LAPACK_version.o
-       $(LOADER) $(LOADOPTS) -o $@ ilaver.o LAPACK_version.o
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
 run: all
        ./testlsame
@@ -39,6 +34,14 @@ run: all
        ./testieee
        ./testversion
 
+clean: cleanobj cleanexe cleantest
+cleanobj:
+       rm -f *.o
+cleanexe:
+       rm -f test*
+cleantest:
+       rm -f core
+
 .SUFFIXES: .o .f
 .f.o:
        $(FORTRAN) $(OPTS) -c -o $@ $<
index f1b07ad..64e6ae1 100644 (file)
@@ -35,7 +35,7 @@
 # To generate lapacke library type 'make lapacke'
 # To make both just type 'make'
 #
-# To remove lapacke object files type 'make cleanlib'
+# To remove lapacke object files type 'make cleanobj'
 # To clean all above type 'make clean'
 # To clean everything including lapacke library type
 # 'make cleanall'
@@ -44,20 +44,25 @@ include ../make.inc
 
 all: lapacke
 
-lapacke:
-       cd include && cp lapacke_mangling_with_flags.h.in lapacke_mangling.h
-       cd src && $(MAKE)
-       cd utils && $(MAKE)
+lapacke: include/lapacke_mangling.h
+       $(MAKE) -C src
+       $(MAKE) -C utils
 
-lapacke_example:
-       cd example && $(MAKE)
+include/lapacke_mangling.h: include/lapacke_mangling_with_flags.h.in
+       cp $< $@
 
-clean: cleanlib
+lapacke_example: lapacke
+       $(MAKE) -C example
 
+clean: cleanlib
+       $(MAKE) -C src clean
+       $(MAKE) -C utils clean
+       $(MAKE) -C example clean
+cleanobj:
+       $(MAKE) -C src cleanobj
+       $(MAKE) -C utils cleanobj
+       $(MAKE) -C example cleanobj
 cleanlib:
-       cd src && $(MAKE) clean
-       cd utils && $(MAKE) clean
-
-cleanall: clean
-       rm -f $(LAPACKE)
-       cd example && $(MAKE) clean
+       rm -f ../$(LAPACKELIB)
+cleanexe:
+       $(MAKE) -C example cleanexe
index 80968e8..f959a2b 100644 (file)
@@ -9,23 +9,26 @@ LIBRARIES = ../../$(LAPACKELIB) ../../$(LAPACKLIB) $(BLASLIB)
 
 # Double Precision Examples
 xexample_DGESV_rowmajor: example_DGESV_rowmajor.o lapacke_example_aux.o $(LIBRARIES)
-       $(LOADER) $(LOADOPTS) -o $@ example_DGESV_rowmajor.o lapacke_example_aux.o $(LIBRARIES)
+       $(LOADER) $(LOADOPTS) -o $@ $^
        ./$@
 
 xexample_DGESV_colmajor: example_DGESV_colmajor.o lapacke_example_aux.o $(LIBRARIES)
-       $(LOADER) $(LOADOPTS) -o $@ example_DGESV_colmajor.o lapacke_example_aux.o $(LIBRARIES)
+       $(LOADER) $(LOADOPTS) -o $@ $^
        ./$@
 
 xexample_DGELS_rowmajor: example_DGELS_rowmajor.o lapacke_example_aux.o $(LIBRARIES)
-       $(LOADER) $(LOADOPTS) -o $@ example_DGELS_rowmajor.o lapacke_example_aux.o $(LIBRARIES)
+       $(LOADER) $(LOADOPTS) -o $@ $^
        ./$@
 
 xexample_DGELS_colmajor: example_DGELS_colmajor.o lapacke_example_aux.o $(LIBRARIES)
-       $(LOADER) $(LOADOPTS) -o $@ example_DGELS_colmajor.o lapacke_example_aux.o $(LIBRARIES)
+       $(LOADER) $(LOADOPTS) -o $@ $^
        ./$@
 
+clean: cleanobj cleanexe
+cleanobj:
+       rm -f *.o
+cleanexe:
+       rm -f x*
+
 .c.o:
        $(CC) $(CFLAGS) -I. -I../include -c -o $@ $<
-
-clean:
-       rm -f *.o x*
index f31c280..74056a0 100644 (file)
@@ -2417,8 +2417,9 @@ all: ../../$(LAPACKELIB)
        $(ARCH) $(ARCHFLAGS) $@ $(MATGEN)
        $(RANLIB) $@
 
+clean: cleanobj
+cleanobj:
+       rm -f *.o
+
 .c.o:
        $(CC) $(CFLAGS) -I../include -c -o $@ $<
-
-clean:
-       rm -f *.o
index 57b8f0d..1f639c6 100644 (file)
@@ -186,11 +186,12 @@ OBJ = lapacke_cgb_nancheck.o \
 all: lib
 
 lib: $(OBJ)
-       $(ARCH) $(ARCHFLAGS) ../../$(LAPACKELIB) $(OBJ)
+       $(ARCH) $(ARCHFLAGS) ../../$(LAPACKELIB) $^
        $(RANLIB) ../../$(LAPACKELIB)
 
+clean: cleanobj
+cleanobj:
+       rm -f *.o
+
 .c.o:
        $(CC) $(CFLAGS) -I../include -c -o $@ $<
-
-clean:
-       rm -f *.o
index 2710949..1d7e82c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -11,61 +11,81 @@ all: lapack_install lib blas_testing lapack_testing
 lib: lapacklib tmglib
 #lib: blaslib variants lapacklib tmglib
 
-clean: cleanlib cleantesting cleanblas_testing cleancblas_testing
-
-lapack_install:
-       ( cd INSTALL; $(MAKE) run )
-
 blaslib:
-       ( cd BLAS/SRC; $(MAKE) )
+       $(MAKE) -C BLAS
 
 cblaslib:
-       ( cd CBLAS; $(MAKE) )
+       $(MAKE) -C CBLAS
 
-lapacklib: lapack_install
-       ( cd SRC; $(MAKE) )
+lapacklib:
+       $(MAKE) -C SRC
 
-lapackelib: lapacklib
-       ( cd LAPACKE; $(MAKE) )
-
-cblas_example: cblaslib blaslib
-       ( cd CBLAS/examples; $(MAKE) )
+lapackelib:
+       $(MAKE) -C LAPACKE
 
-lapacke_example: lapackelib
-       ( cd LAPACKE/example; $(MAKE) )
+tmglib:
+       $(MAKE) -C TESTING/MATGEN
 
 variants:
-       ( cd SRC/VARIANTS; $(MAKE) )
+       $(MAKE) -C SRC/VARIANTS
 
-tmglib:
-       ( cd TESTING/MATGEN; $(MAKE) )
+lapack_install:
+       $(MAKE) -C INSTALL run
 
-lapack_testing: lib
-       ( cd TESTING; $(MAKE) )
-       ./lapack_testing.py
+blas_testing: blaslib
+       $(MAKE) -C BLAS blas_testing
 
-variants_testing: lib variants
-       ( cd TESTING; rm -f xlintst*; $(MAKE) VARLIB='SRC/VARIANTS/LIB/cholrl.a'; \
-       mv stest.out stest_cholrl.out; mv dtest.out dtest_cholrl.out; mv ctest.out ctest_cholrl.out; mv ztest.out ztest_cholrl.out )
-       ( cd TESTING; rm -f xlintst*; $(MAKE) VARLIB='SRC/VARIANTS/LIB/choltop.a'; \
-       mv stest.out stest_choltop.out; mv dtest.out dtest_choltop.out; mv ctest.out ctest_choltop.out; mv ztest.out ztest_choltop.out )
-       ( cd TESTING; rm -f xlintst*; $(MAKE) VARLIB='SRC/VARIANTS/LIB/lucr.a'; \
-       mv stest.out stest_lucr.out; mv dtest.out dtest_lucr.out; mv ctest.out ctest_lucr.out; mv ztest.out ztest_lucr.out )
-       ( cd TESTING; rm -f xlintst*; $(MAKE) VARLIB='SRC/VARIANTS/LIB/lull.a'; \
-       mv stest.out stest_lull.out; mv dtest.out dtest_lull.out; mv ctest.out ctest_lull.out; mv ztest.out ztest_lull.out )
-       ( cd TESTING; rm -f xlintst*; $(MAKE) VARLIB='SRC/VARIANTS/LIB/lurec.a'; \
-       mv stest.out stest_lurec.out; mv dtest.out dtest_lurec.out; mv ctest.out ctest_lurec.out; mv ztest.out ztest_lurec.out )
-       ( cd TESTING; rm -f xlintst*; $(MAKE) VARLIB='SRC/VARIANTS/LIB/qrll.a'; \
-       mv stest.out stest_qrll.out; mv dtest.out dtest_qrll.out; mv ctest.out ctest_qrll.out; mv ztest.out ztest_qrll.out )
+cblas_testing: cblaslib blaslib
+       $(MAKE) -C CBLAS cblas_testing
 
-blas_testing: blaslib
-       ( cd BLAS/TESTING; $(MAKE) run )
+lapack_testing: tmglib lapacklib blaslib
+       $(MAKE) -C TESTING/LIN cleanexe
+       $(MAKE) -C TESTING
+       ./lapack_testing.py
 
-cblas_testing: blaslib
-       ( cd CBLAS; $(MAKE) cblas_testing )
-       ( cd CBLAS; $(MAKE) runtst )
+variants_testing: tmglib variants lapacklib blaslib
+       $(MAKE) -C TESTING/LIN cleanexe
+       $(MAKE) -C TESTING/LIN VARLIB='SRC/VARIANTS/cholrl.a'
+       $(MAKE) -C TESTING stest.out && mv TESTING/stest.out TESTING/stest_cholrl.out
+       $(MAKE) -C TESTING dtest.out && mv TESTING/dtest.out TESTING/dtest_cholrl.out
+       $(MAKE) -C TESTING ctest.out && mv TESTING/ctest.out TESTING/ctest_cholrl.out
+       $(MAKE) -C TESTING ztest.out && mv TESTING/ztest.out TESTING/ztest_cholrl.out
+       $(MAKE) -C TESTING/LIN cleanexe
+       $(MAKE) -C TESTING/LIN VARLIB='SRC/VARIANTS/choltop.a'
+       $(MAKE) -C TESTING stest.out && mv TESTING/stest.out TESTING/stest_choltop.out
+       $(MAKE) -C TESTING dtest.out && mv TESTING/dtest.out TESTING/dtest_choltop.out
+       $(MAKE) -C TESTING ctest.out && mv TESTING/ctest.out TESTING/ctest_choltop.out
+       $(MAKE) -C TESTING ztest.out && mv TESTING/ztest.out TESTING/ztest_choltop.out
+       $(MAKE) -C TESTING/LIN cleanexe
+       $(MAKE) -C TESTING/LIN VARLIB='SRC/VARIANTS/lucr.a'
+       $(MAKE) -C TESTING stest.out && mv TESTING/stest.out TESTING/stest_lucr.out
+       $(MAKE) -C TESTING dtest.out && mv TESTING/dtest.out TESTING/dtest_lucr.out
+       $(MAKE) -C TESTING ctest.out && mv TESTING/ctest.out TESTING/ctest_lucr.out
+       $(MAKE) -C TESTING ztest.out && mv TESTING/ztest.out TESTING/ztest_lucr.out
+       $(MAKE) -C TESTING/LIN cleanexe
+       $(MAKE) -C TESTING/LIN VARLIB='SRC/VARIANTS/lull.a'
+       $(MAKE) -C TESTING stest.out && mv TESTING/stest.out TESTING/stest_lull.out
+       $(MAKE) -C TESTING dtest.out && mv TESTING/dtest.out TESTING/dtest_lull.out
+       $(MAKE) -C TESTING ctest.out && mv TESTING/ctest.out TESTING/ctest_lull.out
+       $(MAKE) -C TESTING ztest.out && mv TESTING/ztest.out TESTING/ztest_lull.out
+       $(MAKE) -C TESTING/LIN cleanexe
+       $(MAKE) -C TESTING/LIN VARLIB='SRC/VARIANTS/lurec.a'
+       $(MAKE) -C TESTING stest.out && mv TESTING/stest.out TESTING/stest_lurec.out
+       $(MAKE) -C TESTING dtest.out && mv TESTING/dtest.out TESTING/dtest_lurec.out
+       $(MAKE) -C TESTING ctest.out && mv TESTING/ctest.out TESTING/ctest_lurec.out
+       $(MAKE) -C TESTING ztest.out && mv TESTING/ztest.out TESTING/ztest_lurec.out
+       $(MAKE) -C TESTING/LIN cleanexe
+       $(MAKE) -C TESTING/LIN VARLIB='SRC/VARIANTS/qrll.a'
+       $(MAKE) -C TESTING stest.out && mv TESTING/stest.out TESTING/stest_qrll.out
+       $(MAKE) -C TESTING dtest.out && mv TESTING/dtest.out TESTING/dtest_qrll.out
+       $(MAKE) -C TESTING ctest.out && mv TESTING/ctest.out TESTING/ctest_qrll.out
+       $(MAKE) -C TESTING ztest.out && mv TESTING/ztest.out TESTING/ztest_qrll.out
 
+cblas_example: cblaslib blaslib
+       $(MAKE) -C CBLAS cblas_example
 
+lapacke_example: lapackelib lapacklib blaslib
+       $(MAKE) -C LAPACKE lapacke_example
 
 html:
        @echo "LAPACK HTML PAGES GENERATION with Doxygen"
@@ -85,27 +105,45 @@ man:
        @echo "Usage: man dgetrf.f"
        @echo "=================="
 
+clean:
+       $(MAKE) -C INSTALL clean
+       $(MAKE) -C BLAS clean
+       $(MAKE) -C CBLAS clean
+       $(MAKE) -C SRC clean
+       $(MAKE) -C SRC/VARIANTS clean
+       $(MAKE) -C TESTING clean
+       $(MAKE) -C TESTING/MATGEN clean
+       $(MAKE) -C TESTING/LIN clean
+       $(MAKE) -C TESTING/EIG clean
+       $(MAKE) -C LAPACKE clean
+       rm -f *.a
+cleanobj:
+       $(MAKE) -C INSTALL cleanobj
+       $(MAKE) -C BLAS cleanobj
+       $(MAKE) -C CBLAS cleanobj
+       $(MAKE) -C SRC cleanobj
+       $(MAKE) -C SRC/VARIANTS cleanobj
+       $(MAKE) -C TESTING/MATGEN cleanobj
+       $(MAKE) -C TESTING/LIN cleanobj
+       $(MAKE) -C TESTING/EIG cleanobj
+       $(MAKE) -C LAPACKE cleanobj
 cleanlib:
-       ( cd INSTALL; $(MAKE) clean )
-       ( cd BLAS/SRC; $(MAKE) clean )
-       ( cd CBLAS; $(MAKE) clean )
-       ( cd SRC; $(MAKE) clean )
-       ( cd SRC/VARIANTS; $(MAKE) clean )
-       ( cd TESTING/MATGEN; $(MAKE) clean )
-       ( cd LAPACKE; $(MAKE) clean )
-
-
-cleanblas_testing:
-       ( cd BLAS/TESTING; $(MAKE) clean )
-
-cleancblas_testing:
-       ( cd CBLAS/testing; $(MAKE) clean )
-
-cleantesting:
-       ( cd TESTING/LIN; $(MAKE) clean )
-       ( cd TESTING/EIG; $(MAKE) clean )
-       ( cd TESTING; rm -f xlin* xeig* )
-
-cleanall: cleanlib cleanblas_testing cleancblas_testing cleantesting
-       ( cd INSTALL; $(MAKE) cleanall )
-       rm -f *.a TESTING/*.out
+       $(MAKE) -C BLAS cleanlib
+       $(MAKE) -C CBLAS cleanlib
+       $(MAKE) -C SRC cleanlib
+       $(MAKE) -C SRC/VARIANTS cleanlib
+       $(MAKE) -C TESTING/MATGEN cleanlib
+       $(MAKE) -C LAPACKE cleanlib
+       rm -f *.a
+cleanexe:
+       $(MAKE) -C INSTALL cleanexe
+       $(MAKE) -C BLAS cleanexe
+       $(MAKE) -C CBLAS cleanexe
+       $(MAKE) -C TESTING/LIN cleanexe
+       $(MAKE) -C TESTING/EIG cleanexe
+       $(MAKE) -C LAPACKE cleanexe
+cleantest:
+       $(MAKE) -C INSTALL cleantest
+       $(MAKE) -C BLAS cleantest
+       $(MAKE) -C CBLAS cleantest
+       $(MAKE) -C TESTING cleantest
index cf0fc6f..cf84c0f 100644 (file)
--- a/README.md
+++ b/README.md
@@ -78,7 +78,7 @@ LAPACK has been thoroughly tested, on many different types of computers. The
 LAPACK project supports the package in the sense that reports of errors or poor
 performance will gain immediate attention from the developers. Such reports,
 descriptions of interesting applications, and other comments should be sent by
-electronic mail to lapack@cs.utk.edu.
+electronic mail to lapack@icl.utk.edu.
 
 For further information on LAPACK please read our FAQ at
 http://www.netlib.org/lapack/#_faq.
@@ -91,7 +91,7 @@ https://github.com/Reference-LAPACK/lapack/issues.
 
 A User forum is also available to help you with the LAPACK library at
 http://icl.cs.utk.edu/lapack-forum/.
-You can also contact directly the LAPACK team at lapack@cs.utk.edu.
+You can also contact directly the LAPACK team at lapack@icl.utk.edu.
 
 
 ## Testing
index d47f730..5d6fe72 100644 (file)
@@ -44,7 +44,7 @@ include ../make.inc
 #  and is created at the next higher directory level.
 #
 #  To remove the object files after the library is created, enter
-#       make clean
+#       make cleanobj
 #  On some systems, you can force the source files to be recompiled by
 #  entering (for example)
 #       make single FRC=FRC
@@ -508,27 +508,23 @@ endif
 all: ../$(LAPACKLIB)
 
 ../$(LAPACKLIB): $(ALLOBJ) $(ALLXOBJ) $(DEPRECATED)
-       $(ARCH) $(ARCHFLAGS) $@ $(ALLOBJ) $(ALLXOBJ) $(DEPRECATED)
+       $(ARCH) $(ARCHFLAGS) $@ $^
        $(RANLIB) $@
 
 single: $(SLASRC) $(DSLASRC) $(SXLASRC) $(SCLAUX) $(ALLAUX)
-       $(ARCH) $(ARCHFLAGS) ../$(LAPACKLIB) $(SLASRC) $(DSLASRC) \
-       $(SXLASRC) $(SCLAUX) $(ALLAUX)
+       $(ARCH) $(ARCHFLAGS) ../$(LAPACKLIB) $^
        $(RANLIB) ../$(LAPACKLIB)
 
 complex: $(CLASRC) $(ZCLASRC) $(CXLASRC) $(SCLAUX) $(ALLAUX)
-       $(ARCH) $(ARCHFLAGS) ../$(LAPACKLIB) $(CLASRC) $(ZCLASRC) \
-       $(CXLASRC) $(SCLAUX) $(ALLAUX)
+       $(ARCH) $(ARCHFLAGS) ../$(LAPACKLIB) $^
        $(RANLIB) ../$(LAPACKLIB)
 
 double: $(DLASRC) $(DSLASRC) $(DXLASRC) $(DZLAUX) $(ALLAUX)
-       $(ARCH) $(ARCHFLAGS) ../$(LAPACKLIB) $(DLASRC) $(DSLASRC) \
-       $(DXLASRC) $(DZLAUX) $(ALLAUX)
+       $(ARCH) $(ARCHFLAGS) ../$(LAPACKLIB) $^
        $(RANLIB) ../$(LAPACKLIB)
 
 complex16: $(ZLASRC) $(ZCLASRC) $(ZXLASRC) $(DZLAUX) $(ALLAUX)
-       $(ARCH) $(ARCHFLAGS) ../$(LAPACKLIB) $(ZLASRC) $(ZCLASRC) \
-       $(ZXLASRC) $(DZLAUX) $(ALLAUX)
+       $(ARCH) $(ARCHFLAGS) ../$(LAPACKLIB) $^
        $(RANLIB) ../$(LAPACKLIB)
 
 $(ALLAUX): $(FRC)
@@ -550,12 +546,14 @@ endif
 FRC:
        @FRC=$(FRC)
 
-clean:
+clean: cleanobj cleanlib
+cleanobj:
        rm -f *.o DEPRECATED/*.o
+cleanlib:
+       rm -f ../$(LAPACKLIB)
 
 .f.o:
        $(FORTRAN) $(OPTS) -c -o $@ $<
-
 .F.o:
        $(FORTRAN) $(OPTS) -c -o $@ $<
 
index 6db97e9..9f14107 100644 (file)
@@ -17,8 +17,6 @@ include ../../make.inc
 #  1065-1081. http://dx.doi.org/10.1137/S0895479896297744
 #######################################################################
 
-VARIANTSDIR = LIB
-
 CHOLRL = cholesky/RL/cpotrf.o cholesky/RL/dpotrf.o cholesky/RL/spotrf.o cholesky/RL/zpotrf.o
 
 CHOLTOP = cholesky/TOP/cpotrf.o cholesky/TOP/dpotrf.o cholesky/TOP/spotrf.o cholesky/TOP/zpotrf.o
@@ -32,36 +30,37 @@ LUREC = lu/REC/cgetrf.o lu/REC/dgetrf.o lu/REC/sgetrf.o lu/REC/zgetrf.o
 QRLL = qr/LL/cgeqrf.o qr/LL/dgeqrf.o qr/LL/sgeqrf.o qr/LL/zgeqrf.o qr/LL/sceil.o
 
 
-all: cholrl choltop lucr lull lurec qrll
+all: cholrl.a choltop.a lucr.a lull.a lurec.a qrll.a
 
-cholrl: $(CHOLRL)
-       $(ARCH) $(ARCHFLAGS) $(VARIANTSDIR)/cholrl.a $(CHOLRL)
-       $(RANLIB) $(VARIANTSDIR)/cholrl.a
+cholrl.a: $(CHOLRL)
+       $(ARCH) $(ARCHFLAGS) $@ $^
+       $(RANLIB) $@
 
-choltop: $(CHOLTOP)
-       $(ARCH) $(ARCHFLAGS) $(VARIANTSDIR)/choltop.a $(CHOLTOP)
-       $(RANLIB) $(VARIANTSDIR)/choltop.a
+choltop.a: $(CHOLTOP)
+       $(ARCH) $(ARCHFLAGS) $@ $^
+       $(RANLIB) $@
 
-lucr: $(LUCR)
-       $(ARCH) $(ARCHFLAGS) $(VARIANTSDIR)/lucr.a $(LUCR)
-       $(RANLIB) $(VARIANTSDIR)/lucr.a
+lucr.a: $(LUCR)
+       $(ARCH) $(ARCHFLAGS) $@ $^
+       $(RANLIB) $@
 
-lull: $(LULL)
-       $(ARCH) $(ARCHFLAGS) $(VARIANTSDIR)/lull.a $(LULL)
-       $(RANLIB) $(VARIANTSDIR)/lull.a
+lull.a: $(LULL)
+       $(ARCH) $(ARCHFLAGS) $@ $^
+       $(RANLIB) $@
 
-lurec: $(LUREC)
-       $(ARCH) $(ARCHFLAGS) $(VARIANTSDIR)/lurec.a $(LUREC)
-       $(RANLIB) $(VARIANTSDIR)/lurec.a
+lurec.a: $(LUREC)
+       $(ARCH) $(ARCHFLAGS) $@ $^
+       $(RANLIB) $@
 
-qrll: $(QRLL)
-       $(ARCH) $(ARCHFLAGS) $(VARIANTSDIR)/qrll.a $(QRLL)
-       $(RANLIB) $(VARIANTSDIR)/qrll.a
+qrll.a: $(QRLL)
+       $(ARCH) $(ARCHFLAGS) $@ $^
+       $(RANLIB) $@
 
+clean: cleanobj cleanlib
+cleanobj:
+       rm -f $(CHOLRL) $(CHOLTOP) $(LUCR) $(LULL) $(LUREC) $(QRLL)
+cleanlib:
+       rm -f *.a
 
 .f.o:
        $(FORTRAN) $(OPTS) -c -o $@ $<
-
-clean:
-       rm -f $(CHOLRL) $(CHOLTOP) $(LUCR) $(LULL) $(LUREC) $(QRLL) \
-             $(VARIANTSDIR)/*.a
index c206215..4d301cc 100644 (file)
@@ -1,5 +1,5 @@
-                  ===============
-                  = README File =
+                  ===============
+                  = README File =
                   ===============
 
 This README File is for the LAPACK driver variants.
@@ -34,10 +34,10 @@ References:For a more detailed description please refer to
 =========
 
 These variants are compiled by default in the build process but they are not tested by default.
-The build process creates one new library per variants in the four arithmetics (singel/double/comple/double complex).
-The libraries are in the SRC/VARIANTS/LIB directory.
+The build process creates one new library per variants in the four arithmetics (single real/double real/single complex/double complex).
+The libraries are in the SRC/VARIANTS directory.
 
-Corresponding libraries created in SRC/VARIANTS/LIB:
+Corresponding libraries created in SRC/VARIANTS:
        - LU Crout : lucr.a
        - LU Left Looking : lull.a
        - LU Sivan Toledo's recursive : lurec.a
@@ -73,7 +73,7 @@ Default using LU Right Looking version:
 
 Using LU Left Looking version:
  $(FORTRAN) -c myprog.f
- $(FORTRAN) -o myexe myprog.o $(PATH TO LAPACK/SRC/VARIANTS/LIB)/lull.a $(LAPACKLIB) $(BLASLIB)
+ $(FORTRAN) -o myexe myprog.o $(PATH TO LAPACK/SRC/VARIANTS)/lull.a $(LAPACKLIB) $(BLASLIB)
 
 ===========
 = SUPPORT =
index 5bead53..8037ac5 100644 (file)
 *>
 *> \verbatim
 *>
-*>  The matrix V stores the elementary reflectors H(i) in the i-th column
-*>  below the diagonal. For example, if M=5 and N=3, the matrix V is
+*>  The matrix V stores the elementary reflectors H(i) in the i-th row
+*>  above the diagonal. For example, if M=5 and N=3, the matrix V is
 *>
 *>               V = (  1  v1 v1 v1 v1 )
 *>                   (     1  v2 v2 v2 )
 *>
 *>  where the vi's represent the vectors which define H(i), which are returned
 *>  in the matrix A.  The 1's along the diagonal of V are not stored in A.
-*>  Let K=MIN(M,N).  The number of blocks is B = ceiling(K/NB), where each
-*>  block is of order NB except for the last block, which is of order
-*>  IB = K - (B-1)*NB.  For each of the B blocks, a upper triangular block
-*>  reflector factor is computed: T1, T2, ..., TB.  The NB-by-NB (and IB-by-IB
-*>  for the last block) T's are stored in the NB-by-N matrix T as
+*>  Let K=MIN(M,N).  The number of blocks is B = ceiling(K/MB), where each
+*>  block is of order MB except for the last block, which is of order
+*>  IB = K - (B-1)*MB.  For each of the B blocks, a upper triangular block
+*>  reflector factor is computed: T1, T2, ..., TB.  The MB-by-MB (and IB-by-IB
+*>  for the last block) T's are stored in the MB-by-K matrix T as
 *>
 *>               T = (T1 T2 ... TB).
 *> \endverbatim
index 751cb61..48a0e74 100644 (file)
@@ -92,8 +92,8 @@
 *>
 *> \verbatim
 *>
-*>  The matrix V stores the elementary reflectors H(i) in the i-th column
-*>  below the diagonal. For example, if M=5 and N=3, the matrix V is
+*>  The matrix V stores the elementary reflectors H(i) in the i-th row
+*>  above the diagonal. For example, if M=5 and N=3, the matrix V is
 *>
 *>               V = (  1  v1 v1 v1 v1 )
 *>                   (     1  v2 v2 v2 )
index e4c991a..2431905 100644 (file)
 *>
 *> \verbatim
 *>
-*> CGEMQRT overwrites the general real M-by-N matrix C with
+*> CGEMLQT overwrites the general real M-by-N matrix C with
 *>
 *>                 SIDE = 'L'     SIDE = 'R'
 *> TRANS = 'N':      Q C            C Q
-*> TRANS = 'C':   Q**C C            C Q**C
+*> TRANS = 'C':   Q**H C            C Q**H
 *>
 *> where Q is a complex orthogonal matrix defined as the product of K
 *> elementary reflectors:
 *>
-*>       Q = H(1) H(2) . . . H(K) = I - V C V**C
+*>       Q = H(1) H(2) . . . H(K) = I - V T V**H
 *>
 *> generated using the compact WY representation as returned by CGELQT.
 *>
 *> \param[in] SIDE
 *> \verbatim
 *>          SIDE is CHARACTER*1
-*>          = 'L': apply Q or Q**C from the Left;
-*>          = 'R': apply Q or Q**C from the Right.
+*>          = 'L': apply Q or Q**H from the Left;
+*>          = 'R': apply Q or Q**H from the Right.
 *> \endverbatim
 *>
 *> \param[in] TRANS
 *> \verbatim
 *>          TRANS is CHARACTER*1
 *>          = 'N':  No transpose, apply Q;
-*>          = 'C':  Transpose, apply Q**C.
+*>          = 'C':  Transpose, apply Q**H.
 *> \endverbatim
 *>
 *> \param[in] M
@@ -82,7 +82,9 @@
 *>
 *> \param[in] V
 *> \verbatim
-*>          V is COMPLEX array, dimension (LDV,K)
+*>          V is COMPLEX array, dimension
+*>                               (LDV,M) if SIDE = 'L',
+*>                               (LDV,N) if SIDE = 'R'
 *>          The i-th row must contain the vector which defines the
 *>          elementary reflector H(i), for i = 1,2,...,k, as returned by
 *>          DGELQT in the first K rows of its array argument A.
 *> \param[in] LDV
 *> \verbatim
 *>          LDV is INTEGER
-*>          The leading dimension of the array V.
-*>          If SIDE = 'L', LDA >= max(1,M);
-*>          if SIDE = 'R', LDA >= max(1,N).
+*>          The leading dimension of the array V. LDV >= max(1,K).
 *> \endverbatim
 *>
 *> \param[in] T
 *> \verbatim
 *>          T is COMPLEX array, dimension (LDT,K)
 *>          The upper triangular factors of the block reflectors
-*>          as returned by DGELQT, stored as a MB-by-M matrix.
+*>          as returned by DGELQT, stored as a MB-by-K matrix.
 *> \endverbatim
 *>
 *> \param[in] LDT
 *> \verbatim
 *>          C is COMPLEX array, dimension (LDC,N)
 *>          On entry, the M-by-N matrix C.
-*>          On exit, C is overwritten by Q C, Q**C C, C Q**C or C Q.
+*>          On exit, C is overwritten by Q C, Q**H C, C Q**H or C Q.
 *> \endverbatim
 *>
 *> \param[in] LDC
index 2b8bb69..b6a3196 100644 (file)
 *>  block is of order NB except for the last block, which is of order
 *>  IB = K - (B-1)*NB.  For each of the B blocks, a upper triangular block
 *>  reflector factor is computed: T1, T2, ..., TB.  The NB-by-NB (and IB-by-IB
-*>  for the last block) T's are stored in the NB-by-N matrix T as
+*>  for the last block) T's are stored in the NB-by-K matrix T as
 *>
 *>               T = (T1 T2 ... TB).
 *> \endverbatim
index 56fb806..f5910b3 100644 (file)
@@ -53,7 +53,7 @@
 *> \verbatim
 *>          TRANS is CHARACTER*1
 *>          = 'N': the linear system involves A;
-*>          = 'C': the linear system involves A**C.
+*>          = 'C': the linear system involves A**H.
 *> \endverbatim
 *>
 *> \param[in] M
index ff11506..5ced8c9 100644 (file)
       EXTERNAL           LSAME, SLAMCH, CLANHB, ILAENV
 *     ..
 *     .. External Subroutines ..
-      EXTERNAL           SSCAL, SSTERF, XERBLA, CLASCL, CSTEQR
+      EXTERNAL           SSCAL, SSTERF, XERBLA, CLASCL, CSTEQR,
      $                   CHETRD_2STAGE
 *     ..
 *     .. Intrinsic Functions ..
index f6640c5..94bd94e 100644 (file)
@@ -66,7 +66,7 @@
 *>          of the matrix B.  NRHS >= 0.
 *> \endverbatim
 *>
-*> \param[in,out] A
+*> \param[in] A
 *> \verbatim
 *>          A is COMPLEX array, dimension (LDA,N)
 *>          Details of factors computed by CHETRF_AA.
index fd19f0a..569397a 100644 (file)
@@ -23,7 +23,7 @@
 *>
 *>                    SIDE = 'L'     SIDE = 'R'
 *>    TRANS = 'N':      Q * C          C * Q
-*>    TRANS = 'T':      Q**T * C       C * Q**T
+*>    TRANS = 'T':      Q**H * C       C * Q**H
 *>    where Q is a real orthogonal matrix defined as the product of blocked
 *>    elementary reflectors computed by short wide LQ
 *>    factorization (CLASWLQ)
 *> \param[in] SIDE
 *> \verbatim
 *>          SIDE is CHARACTER*1
-*>          = 'L': apply Q or Q**T from the Left;
-*>          = 'R': apply Q or Q**T from the Right.
+*>          = 'L': apply Q or Q**H from the Left;
+*>          = 'R': apply Q or Q**H from the Right.
 *> \endverbatim
 *>
 *> \param[in] TRANS
 *> \verbatim
 *>          TRANS is CHARACTER*1
 *>          = 'N':  No transpose, apply Q;
-*>          = 'T':  Transpose, apply Q**T.
+*>          = 'C':  Transpose, apply Q**H.
 *> \endverbatim
 *>
 *> \param[in] M
 *> \verbatim
 *>          M is INTEGER
-*>          The number of rows of the matrix A.  M >=0.
+*>          The number of rows of the matrix C.  M >=0.
 *> \endverbatim
 *>
 *> \param[in] N
 *>
 *> \endverbatim
 *>
-*> \param[in,out] A
+*> \param[in] A
 *> \verbatim
-*>          A is COMPLEX array, dimension (LDA,K)
+*>          A is COMPLEX array, dimension
+*>                               (LDA,M) if SIDE = 'L',
+*>                               (LDA,N) if SIDE = 'R'
 *>          The i-th row must contain the vector which defines the blocked
 *>          elementary reflector H(i), for i = 1,2,...,k, as returned by
-*>          DLASWLQ in the first k rows of its array argument A.
+*>          CLASWLQ in the first k rows of its array argument A.
 *> \endverbatim
 *>
 *> \param[in] LDA
 *> \verbatim
 *>          C is COMPLEX array, dimension (LDC,N)
 *>          On entry, the M-by-N matrix C.
-*>          On exit, C is overwritten by Q*C or Q**T*C or C*Q**T or C*Q.
+*>          On exit, C is overwritten by Q*C or Q**H*C or C*Q**H or C*Q.
 *> \endverbatim
 *>
 *> \param[in] LDC
 *     ..
 *     .. Local Scalars ..
       LOGICAL    LEFT, RIGHT, TRAN, NOTRAN, LQUERY
-      INTEGER    I, II, KK, LW , CTR
+      INTEGER    I, II, KK, LW, CTR
 *     ..
 *     .. External Functions ..
       LOGICAL            LSAME
index a787caa..69acac5 100644 (file)
@@ -23,7 +23,7 @@
 *>
 *>                 SIDE = 'L'     SIDE = 'R'
 *> TRANS = 'N':      Q * C          C * Q
-*> TRANS = 'C':      Q**C * C       C * Q**C
+*> TRANS = 'C':      Q**H * C       C * Q**H
 *>      where Q is a real orthogonal matrix defined as the product
 *>      of blocked elementary reflectors computed by tall skinny
 *>      QR factorization (CLATSQR)
 *> \param[in] SIDE
 *> \verbatim
 *>          SIDE is CHARACTER*1
-*>          = 'L': apply Q or Q**T from the Left;
-*>          = 'R': apply Q or Q**T from the Right.
+*>          = 'L': apply Q or Q**H from the Left;
+*>          = 'R': apply Q or Q**H from the Right.
 *> \endverbatim
 *>
 *> \param[in] TRANS
 *> \verbatim
 *>          TRANS is CHARACTER*1
 *>          = 'N':  No transpose, apply Q;
-*>          = 'C':  Conjugate Transpose, apply Q**C.
+*>          = 'C':  Conjugate Transpose, apply Q**H.
 *> \endverbatim
 *>
 *> \param[in] M
@@ -81,7 +81,7 @@
 *>          N >= NB >= 1.
 *> \endverbatim
 *>
-*> \param[in,out] A
+*> \param[in] A
 *> \verbatim
 *>          A is COMPLEX array, dimension (LDA,K)
 *>          The i-th column must contain the vector which defines the
 *> \verbatim
 *>          C is COMPLEX array, dimension (LDC,N)
 *>          On entry, the M-by-N matrix C.
-*>          On exit, C is overwritten by Q*C or Q**T*C or C*Q**T or C*Q.
+*>          On exit, C is overwritten by Q*C or Q**H*C or C*Q**H or C*Q.
 *> \endverbatim
 *>
 *> \param[in] LDC
index 8b77142..4c23d3b 100644 (file)
@@ -55,7 +55,7 @@
 *> \verbatim
 *>          A is COMPLEX array, dimension (LDA,N)
 *>          On entry, the M-by-N matrix A.
-*>          On exit, the elements on and bleow the diagonal
+*>          On exit, the elements on and below the diagonal
 *>          of the array contain the N-by-N lower triangular matrix L;
 *>          the elements above the diagonal represent Q by the rows
 *>          of blocked V (see Further Details).
index 8b5632c..94fa773 100644 (file)
 *> \verbatim
 *>          IPIV is INTEGER array, dimension (K1+(K2-K1)*abs(INCX))
 *>          The vector of pivot indices. Only the elements in positions
-*>          K1 through K1+(K2-K1)*INCX of IPIV are accessed.
-*>          IPIV(K) = L implies rows K and L are to be interchanged.
+*>          K1 through K1+(K2-K1)*abs(INCX) of IPIV are accessed.
+*>          IPIV(K1+(K-K1)*abs(INCX)) = L implies rows K and L are to be
+*>          interchanged.
 *> \endverbatim
 *>
 *> \param[in] INCX
 *> \verbatim
 *>          INCX is INTEGER
-*>          The increment between successive values of IPIV.  If IPIV
+*>          The increment between successive values of IPIV. If INCX
 *>          is negative, the pivots are applied in reverse order.
 *> \endverbatim
 *
 *     ..
 *     .. Executable Statements ..
 *
-*     Interchange row I with row IPIV(I) for each of rows K1 through K2.
+*     Interchange row I with row IPIV(K1+(I-K1)*abs(INCX)) for each of rows
+*     K1 through K2.
 *
       IF( INCX.GT.0 ) THEN
          IX0 = K1
index 6fedf91..2e2713d 100644 (file)
@@ -66,7 +66,7 @@
 *>          of the matrix B.  NRHS >= 0.
 *> \endverbatim
 *>
-*> \param[in,out] A
+*> \param[in] A
 *> \verbatim
 *>          A is REAL array, dimension (LDA,N)
 *>          Details of factors computed by CSYTRF_AA.
index 322b6dc..4aa9649 100644 (file)
@@ -56,8 +56,8 @@
 *>
 *> \param[in,out] A
 *> \verbatim
-*>          A is COMPLEX array, dimension (LDA,N)
-*>          On entry, the lower triangular N-by-N matrix A.
+*>          A is COMPLEX array, dimension (LDA,M)
+*>          On entry, the lower triangular M-by-M matrix A.
 *>          On exit, the elements on and below the diagonal of the array
 *>          contain the lower triangular matrix L.
 *> \endverbatim
@@ -65,7 +65,7 @@
 *> \param[in] LDA
 *> \verbatim
 *>          LDA is INTEGER
-*>          The leading dimension of the array A.  LDA >= max(1,N).
+*>          The leading dimension of the array A.  LDA >= max(1,M).
 *> \endverbatim
 *>
 *> \param[in,out] B
 *>               C = [ A ] [ B ]
 *>
 *>
-*>  where A is an lower triangular N-by-N matrix, and B is M-by-N pentagonal
+*>  where A is an lower triangular M-by-M matrix, and B is M-by-N pentagonal
 *>  matrix consisting of a M-by-(N-L) rectangular matrix B1 on left of a M-by-L
 *>  upper trapezoidal matrix B2:
 *>          [ B ] = [ B1 ] [ B2 ]
 *>                   [ B1 ]  <- M-by-(N-L) rectangular
-*>                   [ B2 ]  <-     M-by-L upper trapezoidal.
+*>                   [ B2 ]  <-     M-by-L lower trapezoidal.
 *>
 *>  The lower trapezoidal matrix B2 consists of the first L columns of a
-*>  N-by-N lower triangular matrix, where 0 <= L <= MIN(M,N).  If L=0,
+*>  M-by-M lower triangular matrix, where 0 <= L <= MIN(M,N).  If L=0,
 *>  B is rectangular M-by-N; if M=L=N, B is lower triangular.
 *>
 *>  The matrix W stores the elementary reflectors H(i) in the i-th row
 *>  above the diagonal (of A) in the M-by-(M+N) input matrix C
 *>            [ C ] = [ A ] [ B ]
-*>                   [ A ]  <- lower triangular N-by-N
+*>                   [ A ]  <- lower triangular M-by-M
 *>                   [ B ]  <- M-by-N pentagonal
 *>
 *>  so that W can be represented as
 *>            [ W ] = [ I ] [ V ]
-*>                   [ I ]  <- identity, N-by-N
+*>                   [ I ]  <- identity, M-by-M
 *>                   [ V ]  <- M-by-N, same form as B.
 *>
 *>  Thus, all of information needed for W is contained on exit in B, which
index 1c9b128..d1e2884 100644 (file)
@@ -48,7 +48,7 @@
 *>
 *> \param[in,out] A
 *> \verbatim
-*>          A is COMPLEX array, dimension (LDA,N)
+*>          A is COMPLEX array, dimension (LDA,M)
 *>          On entry, the lower triangular M-by-M matrix A.
 *>          On exit, the elements on and below the diagonal of the array
 *>          contain the lower triangular matrix L.
@@ -57,7 +57,7 @@
 *> \param[in] LDA
 *> \verbatim
 *>          LDA is INTEGER
-*>          The leading dimension of the array A.  LDA >= max(1,N).
+*>          The leading dimension of the array A.  LDA >= max(1,M).
 *> \endverbatim
 *>
 *> \param[in,out] B
 *>               C = [ A ][ B ]
 *>
 *>
-*>  where A is an lower triangular N-by-N matrix, and B is M-by-N pentagonal
+*>  where A is an lower triangular M-by-M matrix, and B is M-by-N pentagonal
 *>  matrix consisting of a M-by-(N-L) rectangular matrix B1 left of a M-by-L
 *>  upper trapezoidal matrix B2:
 *>
 *>  above the diagonal (of A) in the M-by-(M+N) input matrix C
 *>
 *>               C = [ A ][ B ]
-*>                   [ A ]  <- lower triangular N-by-N
+*>                   [ A ]  <- lower triangular M-by-M
 *>                   [ B ]  <- M-by-N pentagonal
 *>
 *>  so that W can be represented as
 *>
 *>               W = [ I ][ V ]
-*>                   [ I ]  <- identity, N-by-N
+*>                   [ I ]  <- identity, M-by-M
 *>                   [ V ]  <- M-by-N, same form as B.
 *>
 *>  Thus, all of information needed for W is contained on exit in B, which
index b326d6a..76414fc 100644 (file)
@@ -19,9 +19,9 @@
 *>
 *> \verbatim
 *>
-*> CTPMQRT applies a complex orthogonal matrix Q obtained from a
-*> "triangular-pentagonal" real block reflector H to a general
-*> real matrix C, which consists of two blocks A and B.
+*> CTPMLQT applies a complex orthogonal matrix Q obtained from a
+*> "triangular-pentagonal" complex block reflector H to a general
+*> complex matrix C, which consists of two blocks A and B.
 *> \endverbatim
 *
 *  Arguments:
 *> \param[in] SIDE
 *> \verbatim
 *>          SIDE is CHARACTER*1
-*>          = 'L': apply Q or Q**C from the Left;
-*>          = 'R': apply Q or Q**C from the Right.
+*>          = 'L': apply Q or Q**H from the Left;
+*>          = 'R': apply Q or Q**H from the Right.
 *> \endverbatim
 *>
 *> \param[in] TRANS
 *> \verbatim
 *>          TRANS is CHARACTER*1
 *>          = 'N':  No transpose, apply Q;
-*>          = 'C':  Transpose, apply Q**C.
+*>          = 'C':  Transpose, apply Q**H.
 *> \endverbatim
 *>
 *> \param[in] M
 *>          (LDA,K) if SIDE = 'R'
 *>          On entry, the K-by-N or M-by-K matrix A.
 *>          On exit, A is overwritten by the corresponding block of
-*>          Q*C or Q**C*C or C*Q or C*Q**C.  See Further Details.
+*>          Q*C or Q**H*C or C*Q or C*Q**H.  See Further Details.
 *> \endverbatim
 *>
 *> \param[in] LDA
 *>          B is COMPLEX array, dimension (LDB,N)
 *>          On entry, the M-by-N matrix B.
 *>          On exit, B is overwritten by the corresponding block of
-*>          Q*C or Q**C*C or C*Q or C*Q**C.  See Further Details.
+*>          Q*C or Q**H*C or C*Q or C*Q**H.  See Further Details.
 *> \endverbatim
 *>
 *> \param[in] LDB
 *>
 *>  If TRANS='N' and SIDE='L', C is on exit replaced with Q * C.
 *>
-*>  If TRANS='C' and SIDE='L', C is on exit replaced with Q**C * C.
+*>  If TRANS='C' and SIDE='L', C is on exit replaced with Q**H * C.
 *>
 *>  If TRANS='N' and SIDE='R', C is on exit replaced with C * Q.
 *>
-*>  If TRANS='C' and SIDE='R', C is on exit replaced with C * Q**C.
+*>  If TRANS='C' and SIDE='R', C is on exit replaced with C * Q**H.
 *> \endverbatim
 *>
 *  =====================================================================
index b11e9d6..8f8d40c 100644 (file)
 *>
 *> \verbatim
 *>
-*>  The matrix V stores the elementary reflectors H(i) in the i-th column
-*>  below the diagonal. For example, if M=5 and N=3, the matrix V is
+*>  The matrix V stores the elementary reflectors H(i) in the i-th row
+*>  above the diagonal. For example, if M=5 and N=3, the matrix V is
 *>
 *>               V = (  1  v1 v1 v1 v1 )
 *>                   (     1  v2 v2 v2 )
 *>
 *>  where the vi's represent the vectors which define H(i), which are returned
 *>  in the matrix A.  The 1's along the diagonal of V are not stored in A.
-*>  Let K=MIN(M,N).  The number of blocks is B = ceiling(K/NB), where each
-*>  block is of order NB except for the last block, which is of order
-*>  IB = K - (B-1)*NB.  For each of the B blocks, a upper triangular block
-*>  reflector factor is computed: T1, T2, ..., TB.  The NB-by-NB (and IB-by-IB
-*>  for the last block) T's are stored in the NB-by-N matrix T as
+*>  Let K=MIN(M,N).  The number of blocks is B = ceiling(K/MB), where each
+*>  block is of order MB except for the last block, which is of order
+*>  IB = K - (B-1)*MB.  For each of the B blocks, a upper triangular block
+*>  reflector factor is computed: T1, T2, ..., TB.  The MB-by-MB (and IB-by-IB
+*>  for the last block) T's are stored in the MB-by-K matrix T as
 *>
 *>               T = (T1 T2 ... TB).
 *> \endverbatim
index b0bb242..9970b09 100644 (file)
 *>
 *> \verbatim
 *>
-*>  The matrix V stores the elementary reflectors H(i) in the i-th column
-*>  below the diagonal. For example, if M=5 and N=3, the matrix V is
+*>  The matrix V stores the elementary reflectors H(i) in the i-th row
+*>  above the diagonal. For example, if M=5 and N=3, the matrix V is
 *>
 *>               V = (  1  v1 v1 v1 v1 )
 *>                   (     1  v2 v2 v2 )
index 41a517a..fad4c45 100644 (file)
@@ -6,7 +6,7 @@
 *            http://www.netlib.org/lapack/explore-html/
 *
 *> \htmlonly
-*> Download DGEMQRT + dependencies
+*> Download DGEMLQT + dependencies
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dgemlqt.f">
 *> [TGZ]</a>
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dgemlqt.f">
@@ -35,7 +35,7 @@
 *>
 *> \verbatim
 *>
-*> DGEMQRT overwrites the general real M-by-N matrix C with
+*> DGEMLQT overwrites the general real M-by-N matrix C with
 *>
 *>                 SIDE = 'L'     SIDE = 'R'
 *> TRANS = 'N':      Q C            C Q
@@ -99,7 +99,9 @@
 *>
 *> \param[in] V
 *> \verbatim
-*>          V is DOUBLE PRECISION array, dimension (LDV,K)
+*>          V is DOUBLE PRECISION array, dimension
+*>                               (LDV,M) if SIDE = 'L',
+*>                               (LDV,N) if SIDE = 'R'
 *>          The i-th row must contain the vector which defines the
 *>          elementary reflector H(i), for i = 1,2,...,k, as returned by
 *>          DGELQT in the first K rows of its array argument A.
 *> \param[in] LDV
 *> \verbatim
 *>          LDV is INTEGER
-*>          The leading dimension of the array V.
-*>          If SIDE = 'L', LDA >= max(1,M);
-*>          if SIDE = 'R', LDA >= max(1,N).
+*>          The leading dimension of the array V. LDV >= max(1,K).
 *> \endverbatim
 *>
 *> \param[in] T
 *> \verbatim
 *>          T is DOUBLE PRECISION array, dimension (LDT,K)
 *>          The upper triangular factors of the block reflectors
-*>          as returned by DGELQT, stored as a MB-by-M matrix.
+*>          as returned by DGELQT, stored as a MB-by-K matrix.
 *> \endverbatim
 *>
 *> \param[in] LDT
index 6856bac..33d079e 100644 (file)
 *>  block is of order NB except for the last block, which is of order
 *>  IB = K - (B-1)*NB.  For each of the B blocks, a upper triangular block
 *>  reflector factor is computed: T1, T2, ..., TB.  The NB-by-NB (and IB-by-IB
-*>  for the last block) T's are stored in the NB-by-N matrix T as
+*>  for the last block) T's are stored in the NB-by-K matrix T as
 *>
 *>               T = (T1 T2 ... TB).
 *> \endverbatim
index 8dc6df8..8430ca1 100644 (file)
@@ -49,7 +49,7 @@
 *> \param[in] M
 *> \verbatim
 *>          M is INTEGER
-*>          The number of rows of the matrix A.  M >=0.
+*>          The number of rows of the matrix C.  M >=0.
 *> \endverbatim
 *>
 *> \param[in] N
 *>
 *> \endverbatim
 *>
-*> \param[in,out] A
+*> \param[in] A
 *> \verbatim
-*>          A is DOUBLE PRECISION array, dimension (LDA,K)
+*>          A is DOUBLE PRECISION array, dimension
+*>                               (LDA,M) if SIDE = 'L',
+*>                               (LDA,N) if SIDE = 'R'
 *>          The i-th row must contain the vector which defines the blocked
 *>          elementary reflector H(i), for i = 1,2,...,k, as returned by
 *>          DLASWLQ in the first k rows of its array argument A.
index 9ba4590..d480164 100644 (file)
@@ -81,7 +81,7 @@
 *>          N >= NB >= 1.
 *> \endverbatim
 *>
-*> \param[in,out] A
+*> \param[in] A
 *> \verbatim
 *>          A is DOUBLE PRECISION array, dimension (LDA,K)
 *>          The i-th column must contain the vector which defines the
index 2830711..41f9999 100644 (file)
@@ -55,7 +55,7 @@
 *> \verbatim
 *>          A is DOUBLE PRECISION array, dimension (LDA,N)
 *>          On entry, the M-by-N matrix A.
-*>          On exit, the elements on and bleow the diagonal
+*>          On exit, the elements on and below the diagonal
 *>          of the array contain the N-by-N lower triangular matrix L;
 *>          the elements above the diagonal represent Q by the rows
 *>          of blocked V (see Further Details).
index 2c526ff..575b5c4 100644 (file)
 *> \verbatim
 *>          IPIV is INTEGER array, dimension (K1+(K2-K1)*abs(INCX))
 *>          The vector of pivot indices. Only the elements in positions
-*>          K1 through K1+(K2-K1)*INCX of IPIV are accessed.
-*>          IPIV(K) = L implies rows K and L are to be interchanged.
+*>          K1 through K1+(K2-K1)*abs(INCX) of IPIV are accessed.
+*>          IPIV(K1+(K-K1)*abs(INCX)) = L implies rows K and L are to be
+*>          interchanged.
 *> \endverbatim
 *>
 *> \param[in] INCX
 *> \verbatim
 *>          INCX is INTEGER
-*>          The increment between successive values of IPIV.  If IPIV
+*>          The increment between successive values of IPIV. If INCX
 *>          is negative, the pivots are applied in reverse order.
 *> \endverbatim
 *
 *     ..
 *     .. Executable Statements ..
 *
-*     Interchange row I with row IPIV(I) for each of rows K1 through K2.
+*     Interchange row I with row IPIV(K1+(I-K1)*abs(INCX)) for each of rows
+*     K1 through K2.
 *
       IF( INCX.GT.0 ) THEN
          IX0 = K1
index 12ce333..c66b404 100644 (file)
       EXTERNAL           LSAME, DLAMCH, DLANSB, ILAENV
 *     ..
 *     .. External Subroutines ..
-      EXTERNAL           DLASCL, DSCAL, DSTEQR, DSTERF, XERBLA
+      EXTERNAL           DLASCL, DSCAL, DSTEQR, DSTERF, XERBLA,
      $                   DSYTRD_SB2ST 
 *     ..
 *     .. Intrinsic Functions ..
index b572581..0dafa89 100644 (file)
@@ -66,7 +66,7 @@
 *>          of the matrix B.  NRHS >= 0.
 *> \endverbatim
 *>
-*> \param[in,out] A
+*> \param[in] A
 *> \verbatim
 *>          A is DOUBLE PRECISION array, dimension (LDA,N)
 *>          Details of factors computed by DSYTRF_AA.
index b312c50..a5a9274 100644 (file)
@@ -73,8 +73,8 @@
 *>
 *> \param[in,out] A
 *> \verbatim
-*>          A is DOUBLE PRECISION array, dimension (LDA,N)
-*>          On entry, the lower triangular N-by-N matrix A.
+*>          A is DOUBLE PRECISION array, dimension (LDA,M)
+*>          On entry, the lower triangular M-by-M matrix A.
 *>          On exit, the elements on and below the diagonal of the array
 *>          contain the lower triangular matrix L.
 *> \endverbatim
@@ -82,7 +82,7 @@
 *> \param[in] LDA
 *> \verbatim
 *>          LDA is INTEGER
-*>          The leading dimension of the array A.  LDA >= max(1,N).
+*>          The leading dimension of the array A.  LDA >= max(1,M).
 *> \endverbatim
 *>
 *> \param[in,out] B
 *>               C = [ A ] [ B ]
 *>
 *>
-*>  where A is an lower triangular N-by-N matrix, and B is M-by-N pentagonal
+*>  where A is an lower triangular M-by-M matrix, and B is M-by-N pentagonal
 *>  matrix consisting of a M-by-(N-L) rectangular matrix B1 on left of a M-by-L
 *>  upper trapezoidal matrix B2:
 *>          [ B ] = [ B1 ] [ B2 ]
 *>                   [ B1 ]  <- M-by-(N-L) rectangular
-*>                   [ B2 ]  <-     M-by-L upper trapezoidal.
+*>                   [ B2 ]  <-     M-by-L lower trapezoidal.
 *>
 *>  The lower trapezoidal matrix B2 consists of the first L columns of a
-*>  N-by-N lower triangular matrix, where 0 <= L <= MIN(M,N).  If L=0,
+*>  M-by-M lower triangular matrix, where 0 <= L <= MIN(M,N).  If L=0,
 *>  B is rectangular M-by-N; if M=L=N, B is lower triangular.
 *>
 *>  The matrix W stores the elementary reflectors H(i) in the i-th row
 *>  above the diagonal (of A) in the M-by-(M+N) input matrix C
 *>            [ C ] = [ A ] [ B ]
-*>                   [ A ]  <- lower triangular N-by-N
+*>                   [ A ]  <- lower triangular M-by-M
 *>                   [ B ]  <- M-by-N pentagonal
 *>
 *>  so that W can be represented as
 *>            [ W ] = [ I ] [ V ]
-*>                   [ I ]  <- identity, N-by-N
+*>                   [ I ]  <- identity, M-by-M
 *>                   [ V ]  <- M-by-N, same form as B.
 *>
 *>  Thus, all of information needed for W is contained on exit in B, which
index 7e87e6c..beb5ad6 100644 (file)
@@ -65,7 +65,7 @@
 *>
 *> \param[in,out] A
 *> \verbatim
-*>          A is DOUBLE PRECISION array, dimension (LDA,N)
+*>          A is DOUBLE PRECISION array, dimension (LDA,M)
 *>          On entry, the lower triangular M-by-M matrix A.
 *>          On exit, the elements on and below the diagonal of the array
 *>          contain the lower triangular matrix L.
@@ -74,7 +74,7 @@
 *> \param[in] LDA
 *> \verbatim
 *>          LDA is INTEGER
-*>          The leading dimension of the array A.  LDA >= max(1,N).
+*>          The leading dimension of the array A.  LDA >= max(1,M).
 *> \endverbatim
 *>
 *> \param[in,out] B
 *>               C = [ A ][ B ]
 *>
 *>
-*>  where A is an lower triangular N-by-N matrix, and B is M-by-N pentagonal
+*>  where A is an lower triangular M-by-M matrix, and B is M-by-N pentagonal
 *>  matrix consisting of a M-by-(N-L) rectangular matrix B1 left of a M-by-L
 *>  upper trapezoidal matrix B2:
 *>
 *>  above the diagonal (of A) in the M-by-(M+N) input matrix C
 *>
 *>               C = [ A ][ B ]
-*>                   [ A ]  <- lower triangular N-by-N
+*>                   [ A ]  <- lower triangular M-by-M
 *>                   [ B ]  <- M-by-N pentagonal
 *>
 *>  so that W can be represented as
 *>
 *>               W = [ I ][ V ]
-*>                   [ I ]  <- identity, N-by-N
+*>                   [ I ]  <- identity, M-by-M
 *>                   [ V ]  <- M-by-N, same form as B.
 *>
 *>  Thus, all of information needed for W is contained on exit in B, which
index 786255d..f9b2109 100644 (file)
 *>
 *> \verbatim
 *>
-*>  The matrix V stores the elementary reflectors H(i) in the i-th column
-*>  below the diagonal. For example, if M=5 and N=3, the matrix V is
+*>  The matrix V stores the elementary reflectors H(i) in the i-th row
+*>  above the diagonal. For example, if M=5 and N=3, the matrix V is
 *>
 *>               V = (  1  v1 v1 v1 v1 )
 *>                   (     1  v2 v2 v2 )
 *>
 *>  where the vi's represent the vectors which define H(i), which are returned
 *>  in the matrix A.  The 1's along the diagonal of V are not stored in A.
-*>  Let K=MIN(M,N).  The number of blocks is B = ceiling(K/NB), where each
-*>  block is of order NB except for the last block, which is of order
-*>  IB = K - (B-1)*NB.  For each of the B blocks, a upper triangular block
-*>  reflector factor is computed: T1, T2, ..., TB.  The NB-by-NB (and IB-by-IB
-*>  for the last block) T's are stored in the NB-by-N matrix T as
+*>  Let K=MIN(M,N).  The number of blocks is B = ceiling(K/MB), where each
+*>  block is of order MB except for the last block, which is of order
+*>  IB = K - (B-1)*MB.  For each of the B blocks, a upper triangular block
+*>  reflector factor is computed: T1, T2, ..., TB.  The MB-by-MB (and IB-by-IB
+*>  for the last block) T's are stored in the MB-by-K matrix T as
 *>
 *>               T = (T1 T2 ... TB).
 *> \endverbatim
index b94fc27..9b88874 100644 (file)
@@ -92,8 +92,8 @@
 *>
 *> \verbatim
 *>
-*>  The matrix V stores the elementary reflectors H(i) in the i-th column
-*>  below the diagonal. For example, if M=5 and N=3, the matrix V is
+*>  The matrix V stores the elementary reflectors H(i) in the i-th row
+*>  above the diagonal. For example, if M=5 and N=3, the matrix V is
 *>
 *>               V = (  1  v1 v1 v1 v1 )
 *>                   (     1  v2 v2 v2 )
index 4707434..dc84224 100644 (file)
@@ -18,7 +18,7 @@
 *>
 *> \verbatim
 *>
-*> DGEMQRT overwrites the general real M-by-N matrix C with
+*> DGEMLQT overwrites the general real M-by-N matrix C with
 *>
 *>                 SIDE = 'L'     SIDE = 'R'
 *> TRANS = 'N':      Q C            C Q
@@ -82,7 +82,9 @@
 *>
 *> \param[in] V
 *> \verbatim
-*>          V is REAL array, dimension (LDV,K)
+*>          V is REAL array, dimension
+*>                               (LDV,M) if SIDE = 'L',
+*>                               (LDV,N) if SIDE = 'R'
 *>          The i-th row must contain the vector which defines the
 *>          elementary reflector H(i), for i = 1,2,...,k, as returned by
 *>          DGELQT in the first K rows of its array argument A.
 *> \param[in] LDV
 *> \verbatim
 *>          LDV is INTEGER
-*>          The leading dimension of the array V.
-*>          If SIDE = 'L', LDA >= max(1,M);
-*>          if SIDE = 'R', LDA >= max(1,N).
+*>          The leading dimension of the array V. LDV >= max(1,K).
 *> \endverbatim
 *>
 *> \param[in] T
 *> \verbatim
 *>          T is REAL array, dimension (LDT,K)
 *>          The upper triangular factors of the block reflectors
-*>          as returned by DGELQT, stored as a MB-by-M matrix.
+*>          as returned by DGELQT, stored as a MB-by-K matrix.
 *> \endverbatim
 *>
 *> \param[in] LDT
index d8b9fad..ed8bac4 100644 (file)
 *>  block is of order NB except for the last block, which is of order
 *>  IB = K - (B-1)*NB.  For each of the B blocks, a upper triangular block
 *>  reflector factor is computed: T1, T2, ..., TB.  The NB-by-NB (and IB-by-IB
-*>  for the last block) T's are stored in the NB-by-N matrix T as
+*>  for the last block) T's are stored in the NB-by-K matrix T as
 *>
 *>               T = (T1 T2 ... TB).
 *> \endverbatim
index ccdddbb..f3238b6 100644 (file)
@@ -18,7 +18,7 @@
 *>
 *> \verbatim
 *>
-*>    DLAMQRTS overwrites the general real M-by-N matrix C with
+*>    SLAMSWLQ overwrites the general real M-by-N matrix C with
 *>
 *>
 *>                    SIDE = 'L'     SIDE = 'R'
@@ -26,7 +26,7 @@
 *>    TRANS = 'T':      Q**T * C       C * Q**T
 *>    where Q is a real orthogonal matrix defined as the product of blocked
 *>    elementary reflectors computed by short wide LQ
-*>    factorization (DLASWLQ)
+*>    factorization (SLASWLQ)
 *> \endverbatim
 *
 *  Arguments:
@@ -49,7 +49,7 @@
 *> \param[in] M
 *> \verbatim
 *>          M is INTEGER
-*>          The number of rows of the matrix A.  M >=0.
+*>          The number of rows of the matrix C.  M >=0.
 *> \endverbatim
 *>
 *> \param[in] N
 *>
 *> \endverbatim
 *>
-*> \param[in,out] A
+*> \param[in] A
 *> \verbatim
-*>          A is REAL array, dimension (LDA,K)
+*>          A is REAL array, dimension
+*>                               (LDA,M) if SIDE = 'L',
+*>                               (LDA,N) if SIDE = 'R'
 *>          The i-th row must contain the vector which defines the blocked
 *>          elementary reflector H(i), for i = 1,2,...,k, as returned by
-*>          DLASWLQ in the first k rows of its array argument A.
+*>          SLASWLQ in the first k rows of its array argument A.
 *> \endverbatim
 *>
 *> \param[in] LDA
index 747481d..cbcace6 100644 (file)
@@ -81,7 +81,7 @@
 *>          N >= NB >= 1.
 *> \endverbatim
 *>
-*> \param[in,out] A
+*> \param[in] A
 *> \verbatim
 *>          A is REAL array, dimension (LDA,K)
 *>          The i-th column must contain the vector which defines the
index efd28a6..565ce2b 100644 (file)
@@ -55,7 +55,7 @@
 *> \verbatim
 *>          A is REAL array, dimension (LDA,N)
 *>          On entry, the M-by-N matrix A.
-*>          On exit, the elements on and bleow the diagonal
+*>          On exit, the elements on and below the diagonal
 *>          of the array contain the N-by-N lower triangular matrix L;
 *>          the elements above the diagonal represent Q by the rows
 *>          of blocked V (see Further Details).
index ad12a3a..9a17fdf 100644 (file)
 *> \verbatim
 *>          IPIV is INTEGER array, dimension (K1+(K2-K1)*abs(INCX))
 *>          The vector of pivot indices. Only the elements in positions
-*>          K1 through K1+(K2-K1)*INCX of IPIV are accessed.
-*>          IPIV(K) = L implies rows K and L are to be interchanged.
+*>          K1 through K1+(K2-K1)*abs(INCX) of IPIV are accessed.
+*>          IPIV(K1+(K-K1)*abs(INCX)) = L implies rows K and L are to be
+*>          interchanged.
 *> \endverbatim
 *>
 *> \param[in] INCX
 *> \verbatim
 *>          INCX is INTEGER
-*>          The increment between successive values of IPIV.  If IPIV
+*>          The increment between successive values of IPIV. If INCX
 *>          is negative, the pivots are applied in reverse order.
 *> \endverbatim
 *
 *     ..
 *     .. Executable Statements ..
 *
-*     Interchange row I with row IPIV(I) for each of rows K1 through K2.
+*     Interchange row I with row IPIV(K1+(I-K1)*abs(INCX)) for each of rows
+*     K1 through K2.
 *
       IF( INCX.GT.0 ) THEN
          IX0 = K1
index fc6360c..f77368a 100644 (file)
       EXTERNAL           LSAME, SLAMCH, SLANSB, ILAENV
 *     ..
 *     .. External Subroutines ..
-      EXTERNAL           SLASCL, SSCAL, SSTEQR, SSTERF, XERBLA
+      EXTERNAL           SLASCL, SSCAL, SSTEQR, SSTERF, XERBLA,
      $                   SSYTRD_SB2ST 
 *     ..
 *     .. Intrinsic Functions ..
index 6d08473..aa2f9cf 100644 (file)
@@ -66,7 +66,7 @@
 *>          of the matrix B.  NRHS >= 0.
 *> \endverbatim
 *>
-*> \param[in,out] A
+*> \param[in] A
 *> \verbatim
 *>          A is REAL array, dimension (LDA,N)
 *>          Details of factors computed by SSYTRF_AA.
index e3c37ab..482ce56 100644 (file)
@@ -73,8 +73,8 @@
 *>
 *> \param[in,out] A
 *> \verbatim
-*>          A is REAL array, dimension (LDA,N)
-*>          On entry, the lower triangular N-by-N matrix A.
+*>          A is REAL array, dimension (LDA,M)
+*>          On entry, the lower triangular M-by-M matrix A.
 *>          On exit, the elements on and below the diagonal of the array
 *>          contain the lower triangular matrix L.
 *> \endverbatim
@@ -82,7 +82,7 @@
 *> \param[in] LDA
 *> \verbatim
 *>          LDA is INTEGER
-*>          The leading dimension of the array A.  LDA >= max(1,N).
+*>          The leading dimension of the array A.  LDA >= max(1,M).
 *> \endverbatim
 *>
 *> \param[in,out] B
 *>               C = [ A ] [ B ]
 *>
 *>
-*>  where A is an lower triangular N-by-N matrix, and B is M-by-N pentagonal
+*>  where A is an lower triangular M-by-M matrix, and B is M-by-N pentagonal
 *>  matrix consisting of a M-by-(N-L) rectangular matrix B1 on left of a M-by-L
 *>  upper trapezoidal matrix B2:
 *>          [ B ] = [ B1 ] [ B2 ]
 *>                   [ B1 ]  <- M-by-(N-L) rectangular
-*>                   [ B2 ]  <-     M-by-L upper trapezoidal.
+*>                   [ B2 ]  <-     M-by-L lower trapezoidal.
 *>
 *>  The lower trapezoidal matrix B2 consists of the first L columns of a
-*>  N-by-N lower triangular matrix, where 0 <= L <= MIN(M,N).  If L=0,
+*>  M-by-M lower triangular matrix, where 0 <= L <= MIN(M,N).  If L=0,
 *>  B is rectangular M-by-N; if M=L=N, B is lower triangular.
 *>
 *>  The matrix W stores the elementary reflectors H(i) in the i-th row
 *>  above the diagonal (of A) in the M-by-(M+N) input matrix C
 *>            [ C ] = [ A ] [ B ]
-*>                   [ A ]  <- lower triangular N-by-N
+*>                   [ A ]  <- lower triangular M-by-M
 *>                   [ B ]  <- M-by-N pentagonal
 *>
 *>  so that W can be represented as
 *>            [ W ] = [ I ] [ V ]
-*>                   [ I ]  <- identity, N-by-N
+*>                   [ I ]  <- identity, M-by-M
 *>                   [ V ]  <- M-by-N, same form as B.
 *>
 *>  Thus, all of information needed for W is contained on exit in B, which
index f1b8e03..b16738f 100644 (file)
@@ -65,7 +65,7 @@
 *>
 *> \param[in,out] A
 *> \verbatim
-*>          A is REAL array, dimension (LDA,N)
+*>          A is REAL array, dimension (LDA,M)
 *>          On entry, the lower triangular M-by-M matrix A.
 *>          On exit, the elements on and below the diagonal of the array
 *>          contain the lower triangular matrix L.
@@ -74,7 +74,7 @@
 *> \param[in] LDA
 *> \verbatim
 *>          LDA is INTEGER
-*>          The leading dimension of the array A.  LDA >= max(1,N).
+*>          The leading dimension of the array A.  LDA >= max(1,M).
 *> \endverbatim
 *>
 *> \param[in,out] B
 *>               C = [ A ][ B ]
 *>
 *>
-*>  where A is an lower triangular N-by-N matrix, and B is M-by-N pentagonal
+*>  where A is an lower triangular M-by-M matrix, and B is M-by-N pentagonal
 *>  matrix consisting of a M-by-(N-L) rectangular matrix B1 left of a M-by-L
 *>  upper trapezoidal matrix B2:
 *>
 *>  above the diagonal (of A) in the M-by-(M+N) input matrix C
 *>
 *>               C = [ A ][ B ]
-*>                   [ A ]  <- lower triangular N-by-N
+*>                   [ A ]  <- lower triangular M-by-M
 *>                   [ B ]  <- M-by-N pentagonal
 *>
 *>  so that W can be represented as
 *>
 *>               W = [ I ][ V ]
-*>                   [ I ]  <- identity, N-by-N
+*>                   [ I ]  <- identity, M-by-M
 *>                   [ V ]  <- M-by-N, same form as B.
 *>
 *>  Thus, all of information needed for W is contained on exit in B, which
index c8afd1c..54da169 100644 (file)
 *>
 *> \verbatim
 *>
-*>  The matrix V stores the elementary reflectors H(i) in the i-th column
-*>  below the diagonal. For example, if M=5 and N=3, the matrix V is
+*>  The matrix V stores the elementary reflectors H(i) in the i-th row
+*>  above the diagonal. For example, if M=5 and N=3, the matrix V is
 *>
 *>               V = (  1  v1 v1 v1 v1 )
 *>                   (     1  v2 v2 v2 )
 *>
 *>  where the vi's represent the vectors which define H(i), which are returned
 *>  in the matrix A.  The 1's along the diagonal of V are not stored in A.
-*>  Let K=MIN(M,N).  The number of blocks is B = ceiling(K/NB), where each
-*>  block is of order NB except for the last block, which is of order
-*>  IB = K - (B-1)*NB.  For each of the B blocks, a upper triangular block
-*>  reflector factor is computed: T1, T2, ..., TB.  The NB-by-NB (and IB-by-IB
-*>  for the last block) T's are stored in the NB-by-N matrix T as
+*>  Let K=MIN(M,N).  The number of blocks is B = ceiling(K/MB), where each
+*>  block is of order MB except for the last block, which is of order
+*>  IB = K - (B-1)*MB.  For each of the B blocks, a upper triangular block
+*>  reflector factor is computed: T1, T2, ..., TB.  The MB-by-MB (and IB-by-IB
+*>  for the last block) T's are stored in the MB-by-K matrix T as
 *>
 *>               T = (T1 T2 ... TB).
 *> \endverbatim
index 1406354..438238a 100644 (file)
 *>
 *> \verbatim
 *>
-*>  The matrix V stores the elementary reflectors H(i) in the i-th column
-*>  below the diagonal. For example, if M=5 and N=3, the matrix V is
+*>  The matrix V stores the elementary reflectors H(i) in the i-th row
+*>  above the diagonal. For example, if M=5 and N=3, the matrix V is
 *>
 *>               V = (  1  v1 v1 v1 v1 )
 *>                   (     1  v2 v2 v2 )
index 569713c..e75b24b 100644 (file)
@@ -6,7 +6,7 @@
 *            http://www.netlib.org/lapack/explore-html/
 *
 *> \htmlonly
-*> Download DGEMQRT + dependencies
+*> Download DGEMLQT + dependencies
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zgemlqt.f">
 *> [TGZ]</a>
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zgemlqt.f">
 *>
 *> \verbatim
 *>
-*> ZGEMQRT overwrites the general real M-by-N matrix C with
+*> ZGEMLQT overwrites the general real M-by-N matrix C with
 *>
 *>                 SIDE = 'L'     SIDE = 'R'
 *> TRANS = 'N':      Q C            C Q
-*> TRANS = 'C':   Q**C C            C Q**C
+*> TRANS = 'C':   Q**H C            C Q**H
 *>
 *> where Q is a complex orthogonal matrix defined as the product of K
 *> elementary reflectors:
 *>
-*>       Q = H(1) H(2) . . . H(K) = I - V C V**C
+*>       Q = H(1) H(2) . . . H(K) = I - V T V**H
 *>
 *> generated using the compact WY representation as returned by ZGELQT.
 *>
 *> \param[in] SIDE
 *> \verbatim
 *>          SIDE is CHARACTER*1
-*>          = 'L': apply Q or Q**C from the Left;
-*>          = 'R': apply Q or Q**C from the Right.
+*>          = 'L': apply Q or Q**H from the Left;
+*>          = 'R': apply Q or Q**H from the Right.
 *> \endverbatim
 *>
 *> \param[in] TRANS
 *> \verbatim
 *>          TRANS is CHARACTER*1
 *>          = 'N':  No transpose, apply Q;
-*>          = 'C':  Transpose, apply Q**C.
+*>          = 'C':  Transpose, apply Q**H.
 *> \endverbatim
 *>
 *> \param[in] M
@@ -99,7 +99,9 @@
 *>
 *> \param[in] V
 *> \verbatim
-*>          V is COMPLEX*16 array, dimension (LDV,K)
+*>          V is COMPLEX*16 array, dimension
+*>                               (LDV,M) if SIDE = 'L',
+*>                               (LDV,N) if SIDE = 'R'
 *>          The i-th row must contain the vector which defines the
 *>          elementary reflector H(i), for i = 1,2,...,k, as returned by
 *>          DGELQT in the first K rows of its array argument A.
 *> \param[in] LDV
 *> \verbatim
 *>          LDV is INTEGER
-*>          The leading dimension of the array V.
-*>          If SIDE = 'L', LDA >= max(1,M);
-*>          if SIDE = 'R', LDA >= max(1,N).
+*>          The leading dimension of the array V. LDV >= max(1,K).
 *> \endverbatim
 *>
 *> \param[in] T
 *> \verbatim
 *>          T is COMPLEX*16 array, dimension (LDT,K)
 *>          The upper triangular factors of the block reflectors
-*>          as returned by DGELQT, stored as a MB-by-M matrix.
+*>          as returned by DGELQT, stored as a MB-by-K matrix.
 *> \endverbatim
 *>
 *> \param[in] LDT
 *> \verbatim
 *>          C is COMPLEX*16 array, dimension (LDC,N)
 *>          On entry, the M-by-N matrix C.
-*>          On exit, C is overwritten by Q C, Q**C C, C Q**C or C Q.
+*>          On exit, C is overwritten by Q C, Q**H C, C Q**H or C Q.
 *> \endverbatim
 *>
 *> \param[in] LDC
index 4f872c5..910f803 100644 (file)
 *>  block is of order NB except for the last block, which is of order
 *>  IB = K - (B-1)*NB.  For each of the B blocks, a upper triangular block
 *>  reflector factor is computed: T1, T2, ..., TB.  The NB-by-NB (and IB-by-IB
-*>  for the last block) T's are stored in the NB-by-N matrix T as
+*>  for the last block) T's are stored in the NB-by-K matrix T as
 *>
 *>               T = (T1 T2 ... TB).
 *> \endverbatim
index 40ad10e..e9ff84f 100644 (file)
@@ -53,7 +53,7 @@
 *> \verbatim
 *>          TRANS is CHARACTER*1
 *>          = 'N': the linear system involves A;
-*>          = 'C': the linear system involves A**C.
+*>          = 'C': the linear system involves A**H.
 *> \endverbatim
 *>
 *> \param[in] M
index e30162d..bb0faef 100644 (file)
       EXTERNAL           LSAME, DLAMCH, ZLANHB, ILAENV
 *     ..
 *     .. External Subroutines ..
-      EXTERNAL           DSCAL, DSTERF, XERBLA, ZLASCL, ZSTEQR
+      EXTERNAL           DSCAL, DSTERF, XERBLA, ZLASCL, ZSTEQR,
      $                   ZHETRD_2STAGE
 *     ..
 *     .. Intrinsic Functions ..
index 044bf4c..af8e676 100644 (file)
@@ -67,7 +67,7 @@
 *>          of the matrix B.  NRHS >= 0.
 *> \endverbatim
 *>
-*> \param[in,out] A
+*> \param[in] A
 *> \verbatim
 *>          A is COMPLEX*16 array, dimension (LDA,N)
 *>          Details of factors computed by ZHETRF_AA.
index 8068114..9cd529b 100644 (file)
@@ -23,7 +23,7 @@
 *>
 *>                    SIDE = 'L'     SIDE = 'R'
 *>    TRANS = 'N':      Q * C          C * Q
-*>    TRANS = 'T':      Q**T * C       C * Q**T
+*>    TRANS = 'C':      Q**H * C       C * Q**H
 *>    where Q is a real orthogonal matrix defined as the product of blocked
 *>    elementary reflectors computed by short wide LQ
 *>    factorization (ZLASWLQ)
 *> \param[in] SIDE
 *> \verbatim
 *>          SIDE is CHARACTER*1
-*>          = 'L': apply Q or Q**T from the Left;
-*>          = 'R': apply Q or Q**T from the Right.
+*>          = 'L': apply Q or Q**H from the Left;
+*>          = 'R': apply Q or Q**H from the Right.
 *> \endverbatim
 *>
 *> \param[in] TRANS
 *> \verbatim
 *>          TRANS is CHARACTER*1
 *>          = 'N':  No transpose, apply Q;
-*>          = 'T':  Transpose, apply Q**T.
+*>          = 'C':  Conjugate Transpose, apply Q**H.
 *> \endverbatim
 *>
 *> \param[in] M
 *> \verbatim
 *>          M is INTEGER
-*>          The number of rows of the matrix A.  M >=0.
+*>          The number of rows of the matrix C.  M >=0.
 *> \endverbatim
 *>
 *> \param[in] N
 *>
 *> \endverbatim
 *>
-*> \param[in,out] A
+*> \param[in] A
 *> \verbatim
-*>          A is COMPLEX*16 array, dimension (LDA,K)
+*>          A is COMPLEX*16 array, dimension
+*>                               (LDA,M) if SIDE = 'L',
+*>                               (LDA,N) if SIDE = 'R'
 *>          The i-th row must contain the vector which defines the blocked
 *>          elementary reflector H(i), for i = 1,2,...,k, as returned by
-*>          DLASWLQ in the first k rows of its array argument A.
+*>          ZLASWLQ in the first k rows of its array argument A.
 *> \endverbatim
 *>
 *> \param[in] LDA
 *> \verbatim
 *>          C is COMPLEX*16 array, dimension (LDC,N)
 *>          On entry, the M-by-N matrix C.
-*>          On exit, C is overwritten by Q*C or Q**T*C or C*Q**T or C*Q.
+*>          On exit, C is overwritten by Q*C or Q**H*C or C*Q**H or C*Q.
 *> \endverbatim
 *>
 *> \param[in] LDC
 *
 *     .. Scalar Arguments ..
       CHARACTER         SIDE, TRANS
-      INTEGER           INFO, LDA, M, N, K, MB, NB, LDT, LWORK, LDC, LW
+      INTEGER           INFO, LDA, M, N, K, MB, NB, LDT, LWORK, LDC
 *     ..
 *     .. Array Arguments ..
       COMPLEX*16        A( LDA, * ), WORK( * ), C(LDC, * ),
 *     ..
 *     .. Local Scalars ..
       LOGICAL    LEFT, RIGHT, TRAN, NOTRAN, LQUERY
-      INTEGER    I, II, KK, CTR
+      INTEGER    I, II, KK, LW, CTR
 *     ..
 *     .. External Functions ..
       LOGICAL            LSAME
index 855083a..7937001 100644 (file)
@@ -23,7 +23,7 @@
 *>
 *>                 SIDE = 'L'     SIDE = 'R'
 *> TRANS = 'N':      Q * C          C * Q
-*> TRANS = 'C':      Q**C * C       C * Q**C
+*> TRANS = 'C':      Q**H * C       C * Q**H
 *>      where Q is a real orthogonal matrix defined as the product
 *>      of blocked elementary reflectors computed by tall skinny
 *>      QR factorization (ZLATSQR)
 *> \param[in] SIDE
 *> \verbatim
 *>          SIDE is CHARACTER*1
-*>          = 'L': apply Q or Q**T from the Left;
-*>          = 'R': apply Q or Q**T from the Right.
+*>          = 'L': apply Q or Q**H from the Left;
+*>          = 'R': apply Q or Q**H from the Right.
 *> \endverbatim
 *>
 *> \param[in] TRANS
 *> \verbatim
 *>          TRANS is CHARACTER*1
 *>          = 'N':  No transpose, apply Q;
-*>          = 'C':  Conjugate Transpose, apply Q**C.
+*>          = 'C':  Conjugate Transpose, apply Q**H.
 *> \endverbatim
 *>
 *> \param[in] M
@@ -81,7 +81,7 @@
 *>          N >= NB >= 1.
 *> \endverbatim
 *>
-*> \param[in,out] A
+*> \param[in] A
 *> \verbatim
 *>          A is COMPLEX*16 array, dimension (LDA,K)
 *>          The i-th column must contain the vector which defines the
 *> \verbatim
 *>          C is COMPLEX*16 array, dimension (LDC,N)
 *>          On entry, the M-by-N matrix C.
-*>          On exit, C is overwritten by Q*C or Q**T*C or C*Q**T or C*Q.
+*>          On exit, C is overwritten by Q*C or Q**H*C or C*Q**H or C*Q.
 *> \endverbatim
 *>
 *> \param[in] LDC
index cd7bcc3..96f86f1 100644 (file)
@@ -55,7 +55,7 @@
 *> \verbatim
 *>          A is COMPLEX*16 array, dimension (LDA,N)
 *>          On entry, the M-by-N matrix A.
-*>          On exit, the elements on and bleow the diagonal
+*>          On exit, the elements on and below the diagonal
 *>          of the array contain the N-by-N lower triangular matrix L;
 *>          the elements above the diagonal represent Q by the rows
 *>          of blocked V (see Further Details).
index 81ceba2..1333e26 100644 (file)
 *> \verbatim
 *>          IPIV is INTEGER array, dimension (K1+(K2-K1)*abs(INCX))
 *>          The vector of pivot indices. Only the elements in positions
-*>          K1 through K1+(K2-K1)*INCX of IPIV are accessed.
-*>          IPIV(K) = L implies rows K and L are to be interchanged.
+*>          K1 through K1+(K2-K1)*abs(INCX) of IPIV are accessed.
+*>          IPIV(K1+(K-K1)*abs(INCX)) = L implies rows K and L are to be
+*>          interchanged.
 *> \endverbatim
 *>
 *> \param[in] INCX
 *> \verbatim
 *>          INCX is INTEGER
-*>          The increment between successive values of IPIV.  If IPIV
+*>          The increment between successive values of IPIV. If INCX
 *>          is negative, the pivots are applied in reverse order.
 *> \endverbatim
 *
 *     ..
 *     .. Executable Statements ..
 *
-*     Interchange row I with row IPIV(I) for each of rows K1 through K2.
+*     Interchange row I with row IPIV(K1+(I-K1)*abs(INCX)) for each of rows
+*     K1 through K2.
 *
       IF( INCX.GT.0 ) THEN
          IX0 = K1
index b3c9b9e..fc7f31e 100644 (file)
@@ -66,7 +66,7 @@
 *>          of the matrix B.  NRHS >= 0.
 *> \endverbatim
 *>
-*> \param[in,out] A
+*> \param[in] A
 *> \verbatim
 *>          A is COMPLEX*16 array, dimension (LDA,N)
 *>          Details of factors computed by ZSYTRF_AA.
index 2874020..a9a035e 100644 (file)
@@ -73,8 +73,8 @@
 *>
 *> \param[in,out] A
 *> \verbatim
-*>          A is COMPLEX*16 array, dimension (LDA,N)
-*>          On entry, the lower triangular N-by-N matrix A.
+*>          A is COMPLEX*16 array, dimension (LDA,M)
+*>          On entry, the lower triangular M-by-M matrix A.
 *>          On exit, the elements on and below the diagonal of the array
 *>          contain the lower triangular matrix L.
 *> \endverbatim
@@ -82,7 +82,7 @@
 *> \param[in] LDA
 *> \verbatim
 *>          LDA is INTEGER
-*>          The leading dimension of the array A.  LDA >= max(1,N).
+*>          The leading dimension of the array A.  LDA >= max(1,M).
 *> \endverbatim
 *>
 *> \param[in,out] B
 *>               C = [ A ] [ B ]
 *>
 *>
-*>  where A is an lower triangular N-by-N matrix, and B is M-by-N pentagonal
+*>  where A is an lower triangular M-by-M matrix, and B is M-by-N pentagonal
 *>  matrix consisting of a M-by-(N-L) rectangular matrix B1 on left of a M-by-L
 *>  upper trapezoidal matrix B2:
 *>          [ B ] = [ B1 ] [ B2 ]
 *>                   [ B1 ]  <- M-by-(N-L) rectangular
-*>                   [ B2 ]  <-     M-by-L upper trapezoidal.
+*>                   [ B2 ]  <-     M-by-L lower trapezoidal.
 *>
 *>  The lower trapezoidal matrix B2 consists of the first L columns of a
-*>  N-by-N lower triangular matrix, where 0 <= L <= MIN(M,N).  If L=0,
+*>  M-by-M lower triangular matrix, where 0 <= L <= MIN(M,N).  If L=0,
 *>  B is rectangular M-by-N; if M=L=N, B is lower triangular.
 *>
 *>  The matrix W stores the elementary reflectors H(i) in the i-th row
 *>  above the diagonal (of A) in the M-by-(M+N) input matrix C
 *>            [ C ] = [ A ] [ B ]
-*>                   [ A ]  <- lower triangular N-by-N
+*>                   [ A ]  <- lower triangular M-by-M
 *>                   [ B ]  <- M-by-N pentagonal
 *>
 *>  so that W can be represented as
 *>            [ W ] = [ I ] [ V ]
-*>                   [ I ]  <- identity, N-by-N
+*>                   [ I ]  <- identity, M-by-M
 *>                   [ V ]  <- M-by-N, same form as B.
 *>
 *>  Thus, all of information needed for W is contained on exit in B, which
index 733f9dc..a1d96db 100644 (file)
@@ -65,7 +65,7 @@
 *>
 *> \param[in,out] A
 *> \verbatim
-*>          A is COMPLEX*16 array, dimension (LDA,N)
+*>          A is COMPLEX*16 array, dimension (LDA,M)
 *>          On entry, the lower triangular M-by-M matrix A.
 *>          On exit, the elements on and below the diagonal of the array
 *>          contain the lower triangular matrix L.
@@ -74,7 +74,7 @@
 *> \param[in] LDA
 *> \verbatim
 *>          LDA is INTEGER
-*>          The leading dimension of the array A.  LDA >= max(1,N).
+*>          The leading dimension of the array A.  LDA >= max(1,M).
 *> \endverbatim
 *>
 *> \param[in,out] B
 *>               C = [ A ][ B ]
 *>
 *>
-*>  where A is an lower triangular N-by-N matrix, and B is M-by-N pentagonal
+*>  where A is an lower triangular M-by-M matrix, and B is M-by-N pentagonal
 *>  matrix consisting of a M-by-(N-L) rectangular matrix B1 left of a M-by-L
 *>  upper trapezoidal matrix B2:
 *>
 *>  above the diagonal (of A) in the M-by-(M+N) input matrix C
 *>
 *>               C = [ A ][ B ]
-*>                   [ A ]  <- lower triangular N-by-N
+*>                   [ A ]  <- lower triangular M-by-M
 *>                   [ B ]  <- M-by-N pentagonal
 *>
 *>  so that W can be represented as
 *>
 *>               W = [ I ][ V ]
-*>                   [ I ]  <- identity, N-by-N
+*>                   [ I ]  <- identity, M-by-M
 *>                   [ V ]  <- M-by-N, same form as B.
 *>
 *>  Thus, all of information needed for W is contained on exit in B, which
index f9540e1..e6c611e 100644 (file)
@@ -6,7 +6,7 @@
 *            http://www.netlib.org/lapack/explore-html/
 *
 *> \htmlonly
-*> Download DTPMQRT + dependencies
+*> Download ZTPMLQT + dependencies
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/ztpmlqt.f">
 *> [TGZ]</a>
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/ztpmlqt.f">
@@ -36,9 +36,9 @@
 *>
 *> \verbatim
 *>
-*> ZTPMQRT applies a complex orthogonal matrix Q obtained from a
-*> "triangular-pentagonal" real block reflector H to a general
-*> real matrix C, which consists of two blocks A and B.
+*> ZTPMLQT applies a complex orthogonal matrix Q obtained from a
+*> "triangular-pentagonal" complex block reflector H to a general
+*> complex matrix C, which consists of two blocks A and B.
 *> \endverbatim
 *
 *  Arguments:
 *> \param[in] SIDE
 *> \verbatim
 *>          SIDE is CHARACTER*1
-*>          = 'L': apply Q or Q**C from the Left;
-*>          = 'R': apply Q or Q**C from the Right.
+*>          = 'L': apply Q or Q**H from the Left;
+*>          = 'R': apply Q or Q**H from the Right.
 *> \endverbatim
 *>
 *> \param[in] TRANS
 *> \verbatim
 *>          TRANS is CHARACTER*1
 *>          = 'N':  No transpose, apply Q;
-*>          = 'C':  Transpose, apply Q**C.
+*>          = 'C':  Transpose, apply Q**H.
 *> \endverbatim
 *>
 *> \param[in] M
 *>          (LDA,K) if SIDE = 'R'
 *>          On entry, the K-by-N or M-by-K matrix A.
 *>          On exit, A is overwritten by the corresponding block of
-*>          Q*C or Q**C*C or C*Q or C*Q**C.  See Further Details.
+*>          Q*C or Q**H*C or C*Q or C*Q**H.  See Further Details.
 *> \endverbatim
 *>
 *> \param[in] LDA
 *>          B is COMPLEX*16 array, dimension (LDB,N)
 *>          On entry, the M-by-N matrix B.
 *>          On exit, B is overwritten by the corresponding block of
-*>          Q*C or Q**C*C or C*Q or C*Q**C.  See Further Details.
+*>          Q*C or Q**H*C or C*Q or C*Q**H.  See Further Details.
 *> \endverbatim
 *>
 *> \param[in] LDB
 *>
 *>  If TRANS='N' and SIDE='L', C is on exit replaced with Q * C.
 *>
-*>  If TRANS='C' and SIDE='L', C is on exit replaced with Q**C * C.
+*>  If TRANS='C' and SIDE='L', C is on exit replaced with Q**H * C.
 *>
 *>  If TRANS='N' and SIDE='R', C is on exit replaced with C * Q.
 *>
-*>  If TRANS='C' and SIDE='R', C is on exit replaced with C * Q**C.
+*>  If TRANS='C' and SIDE='R', C is on exit replaced with C * Q**H.
 *> \endverbatim
 *>
 *  =====================================================================
index 9ab8b42..ef83311 100644 (file)
       EXTERNAL           LSAME, ILAENV, IZAMAX, DLAMCH, DZASUM
 *     ..
 *     .. External Subroutines ..
-      EXTERNAL           XERBLA, ZCOPY, ZDSCAL, ZGEMV, ZLATRS
+      EXTERNAL           XERBLA, ZCOPY, ZDSCAL, ZGEMV, ZLATRS,
      $                   ZGEMM, DLABAD, ZLASET
 *     ..
 *     .. Intrinsic Functions ..
index 1de4a73..7804612 100644 (file)
@@ -23,11 +23,10 @@ include ../../make.inc
 #  without any arguments creates all four test programs.
 #  The executable files are called
 #       xeigtsts, xeigtstd, xeigtstc, and xeigtstz
-#  and are created in the next higher directory level.
 #
 #  To remove the object files after the executable files have been
 #  created, enter
-#       make clean
+#       make cleanobj
 #  On some systems, you can force the source files to be recompiled by
 #  entering (for example)
 #       make single FRC=FRC
@@ -120,30 +119,22 @@ ZEIGTST = zchkee.o \
 
 all: single complex double complex16
 
-single: ../xeigtsts
-complex: ../xeigtstc
-double: ../xeigtstd
-complex16: ../xeigtstz
+single: xeigtsts
+complex: xeigtstc
+double: xeigtstd
+complex16: xeigtstz
 
-../xeigtsts: $(SEIGTST) $(SCIGTST) $(AEIGTST) ../../$(LAPACKLIB)
-       $(LOADER) $(LOADOPTS) -o $@ \
-       $(SEIGTST) $(SCIGTST) $(AEIGTST) ../../$(TMGLIB) \
-       ../../$(LAPACKLIB) $(BLASLIB)
+xeigtsts: $(SEIGTST) $(SCIGTST) $(AEIGTST) ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
-../xeigtstc: $(CEIGTST) $(SCIGTST) $(AEIGTST) ../../$(LAPACKLIB)
-       $(LOADER) $(LOADOPTS) -o $@ \
-       $(CEIGTST) $(SCIGTST) $(AEIGTST) ../../$(TMGLIB) \
-       ../../$(LAPACKLIB) $(BLASLIB)
+xeigtstc: $(CEIGTST) $(SCIGTST) $(AEIGTST) ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
-../xeigtstd: $(DEIGTST) $(DZIGTST) $(AEIGTST) ../../$(LAPACKLIB)
-       $(LOADER) $(LOADOPTS) -o $@ \
-       $(DEIGTST) $(DZIGTST) $(AEIGTST) ../../$(TMGLIB) \
-       ../../$(LAPACKLIB) $(BLASLIB)
+xeigtstd: $(DEIGTST) $(DZIGTST) $(AEIGTST) ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
-../xeigtstz: $(ZEIGTST) $(DZIGTST) $(AEIGTST) ../../$(LAPACKLIB)
-       $(LOADER) $(LOADOPTS) -o $@ \
-       $(ZEIGTST) $(DZIGTST) $(AEIGTST) ../../$(TMGLIB) \
-       ../../$(LAPACKLIB) $(BLASLIB)
+xeigtstz: $(ZEIGTST) $(DZIGTST) $(AEIGTST) ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
 $(AEIGTST): $(FRC)
 $(SCIGTST): $(FRC)
@@ -156,8 +147,11 @@ $(ZEIGTST): $(FRC)
 FRC:
        @FRC=$(FRC)
 
-clean:
+clean: cleanobj cleanexe
+cleanobj:
        rm -f *.o
+cleanexe:
+       rm -f xeigtst*
 
 schkee.o: schkee.f
        $(FORTRAN) $(DRVOPTS) -c -o $@ $<
index 9420be8..88c0499 100644 (file)
 *     ..
 *     .. External Subroutines ..
       EXTERNAL           DLASUM, XERBLA, ZHBT21, ZHBTRD, ZLACPY, ZLASET,
-     $                   ZLATMR, ZLATMS, ZHBTRD_HB2ST, ZSTEQR
+     $                   ZLATMR, ZLATMS, ZHETRD_HB2ST, ZSTEQR
 *     ..
 *     .. Intrinsic Functions ..
       INTRINSIC          ABS, DBLE, DCONJG, MAX, MIN, SQRT
index b3f2eae..dbf8d80 100644 (file)
      $                   ZHET22, ZHPEV, ZHPEVD, ZHPEVX, ZLACPY, ZLASET,
      $                   ZHEEVD_2STAGE, ZHEEVR_2STAGE, ZHEEVX_2STAGE,
      $                   ZHEEV_2STAGE, ZHBEV_2STAGE, ZHBEVD_2STAGE,
-     $                   ZHBEVX_2STAGE, ZHETRD_2STAGE, ZHETRD_SY2SB, 
-     $                   ZHETRD_SB2ST, ZLATMR, ZLATMS
+     $                   ZHBEVX_2STAGE, ZHETRD_2STAGE, ZLATMR, ZLATMS
 *     ..
 *     .. Intrinsic Functions ..
       INTRINSIC          ABS, DBLE, INT, LOG, MAX, MIN, SQRT
index 1688f53..38fc857 100644 (file)
@@ -29,8 +29,7 @@
 *> ZHPEV, CHPEVX, CHPEVD, and ZSTEDC.
 *> ZHEEVD_2STAGE, ZHEEVR_2STAGE, ZHEEVX_2STAGE,
 *> ZHEEV_2STAGE, ZHBEV_2STAGE, ZHBEVD_2STAGE,
-*> ZHBEVX_2STAGE, ZHETRD_2STAGE, ZHETRD_SY2SB,
-*> ZHETRD_SB2ST
+*> ZHBEVX_2STAGE, ZHETRD_2STAGE
 *> \endverbatim
 *
 *  Arguments:
      $                   ZUNGTR, ZUNMTR, ZUPGTR, ZUPMTR,
      $                   ZHEEVD_2STAGE, ZHEEVR_2STAGE, ZHEEVX_2STAGE,
      $                   ZHEEV_2STAGE, ZHBEV_2STAGE, ZHBEVD_2STAGE,
-     $                   ZHBEVX_2STAGE, ZHETRD_2STAGE, ZHETRD_SY2SB,
-     $                   ZHETRD_SB2ST
+     $                   ZHBEVX_2STAGE, ZHETRD_2STAGE
 *     ..
 *     .. Scalars in Common ..
       LOGICAL            LERR, OK
index 98bc1e8..f554bea 100644 (file)
@@ -7,10 +7,10 @@ include ../../make.inc
 #       ALINTST -- Auxiliary test routines
 #       SLINTST -- Single precision real test routines
 #       CLINTST -- Single precision complex test routines
-#       SCLNTST -- Single and Complex routines in common
+#       SCLNTST -- Single precision real and complex routines in common
 #       DLINTST -- Double precision real test routines
 #       ZLINTST -- Double precision complex test routines
-#       DZLNTST -- Double and Double Complex routines in common
+#       DZLNTST -- Double precision real and complex routines in common
 #
 #  Test programs can be generated for all or some of the four different
 #  precisions.  Enter make followed by one or more of the data types
@@ -22,12 +22,11 @@ include ../../make.inc
 #       make
 #  without any arguments creates all four test programs.
 #  The executable files are called
-#       xlintims, xlintimd, xlintimc, and xlintimz
-#  and are created in the next higher directory level.
+#       xlintsts, xlintstd, xlintstc, and xlintstz
 #
 #  To remove the object files after the executable files have been
 #  created, enter
-#       make clean
+#       make cleanobj
 #  On some systems, you can force the source files to be recompiled by
 #  entering (for example)
 #       make single FRC=FRC
@@ -248,55 +247,45 @@ ZLINTSTRFP = zchkrfp.o zdrvrfp.o zdrvrf1.o zdrvrf2.o zdrvrf3.o zdrvrf4.o zerrrfp
 
 all: single double complex complex16 proto-single proto-double proto-complex proto-complex16
 
-single: ../xlintsts
-double: ../xlintstd
-complex: ../xlintstc
-complex16: ../xlintstz
+single: xlintsts
+double: xlintstd
+complex: xlintstc
+complex16: xlintstz
 
-proto-single: ../xlintstrfs
-proto-double: ../xlintstds ../xlintstrfd
-proto-complex: ../xlintstrfc
-proto-complex16: ../xlintstzc ../xlintstrfz
+proto-single: xlintstrfs
+proto-double: xlintstds xlintstrfd
+proto-complex: xlintstrfc
+proto-complex16: xlintstzc xlintstrfz
 
-../xlintsts: $(ALINTST) $(SLINTST) $(SCLNTST) ../../$(LAPACKLIB)
-       $(LOADER) $(LOADOPTS) -o $@ $(ALINTST) $(SCLNTST) $(SLINTST) \
-       ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB)
+xlintsts: $(ALINTST) $(SLINTST) $(SCLNTST) ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
-../xlintstc: $(ALINTST) $(CLINTST) $(SCLNTST) ../../$(LAPACKLIB)
-       $(LOADER) $(LOADOPTS) -o $@ $(ALINTST) $(SCLNTST) $(CLINTST) \
-       ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB)
+xlintstc: $(ALINTST) $(CLINTST) $(SCLNTST) ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
-../xlintstd: $(ALINTST) $(DLINTST) $(DZLNTST) ../../$(LAPACKLIB)
-       $(LOADER) $(LOADOPTS) -o $@ $^ \
-       ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB)
+xlintstd: $(ALINTST) $(DLINTST) $(DZLNTST) ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
-../xlintstz: $(ALINTST) $(ZLINTST) $(DZLNTST) ../../$(LAPACKLIB)
-       $(LOADER) $(LOADOPTS) -o $@ $(ALINTST) $(DZLNTST) $(ZLINTST) \
-       ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB)
+xlintstz: $(ALINTST) $(ZLINTST) $(DZLNTST) ../../$(TMGLIB) ../../$(LAPACKLIB) $(XBLASLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
-../xlintstds: $(DSLINTST) ../../$(LAPACKLIB)
-       $(LOADER) $(LOADOPTS) -o $@ $(DSLINTST) \
-       ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+xlintstds: $(DSLINTST) ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
-../xlintstzc: $(ZCLINTST) ../../$(LAPACKLIB)
-       $(LOADER) $(LOADOPTS) -o $@ $(ZCLINTST) \
-       ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+xlintstzc: $(ZCLINTST) ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
-../xlintstrfs: $(SLINTSTRFP) ../../$(LAPACKLIB)
-       $(LOADER) $(LOADOPTS) -o $@ $(SLINTSTRFP) \
-       ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+xlintstrfs: $(SLINTSTRFP) ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
-../xlintstrfd: $(DLINTSTRFP) ../../$(LAPACKLIB)
-       $(LOADER) $(LOADOPTS) -o $@ $(DLINTSTRFP) \
-       ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+xlintstrfd: $(DLINTSTRFP) ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
-../xlintstrfc: $(CLINTSTRFP) ../../$(LAPACKLIB)
-       $(LOADER) $(LOADOPTS) -o $@ $(CLINTSTRFP) \
-       ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+xlintstrfc: $(CLINTSTRFP) ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
-../xlintstrfz: $(ZLINTSTRFP) ../../$(LAPACKLIB)
-       $(LOADER) $(LOADOPTS) -o $@ $(ZLINTSTRFP) \
-       ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+xlintstrfz: $(ZLINTSTRFP) ../../$(TMGLIB) ../../$(LAPACKLIB) $(BLASLIB)
+       $(LOADER) $(LOADOPTS) -o $@ $^
 
 $(ALINTST): $(FRC)
 $(SCLNTST): $(FRC)
@@ -309,8 +298,11 @@ $(ZLINTST): $(FRC)
 FRC:
        @FRC=$(FRC)
 
-clean:
+clean: cleanobj cleanexe
+cleanobj:
        rm -f *.o
+cleanexe:
+       rm -f xlintst*
 
 schkaa.o: schkaa.f
        $(FORTRAN) $(DRVOPTS) -c -o $@ $<
index 4cc69f7..06f09de 100644 (file)
@@ -25,7 +25,7 @@ include ../../make.inc
 #  and is created at the LAPACK directory level.
 #
 #  To remove the object files after the library is created, enter
-#       make clean
+#       make cleanobj
 #  On some systems, you can force the source files to be recompiled by
 #  entering (for example)
 #       make single FRC=FRC
@@ -58,23 +58,23 @@ ALLOBJ = $(SMATGEN) $(CMATGEN) $(SCATGEN) $(DMATGEN) $(ZMATGEN) \
        $(DZATGEN)
 
 ../../$(TMGLIB): $(ALLOBJ)
-       $(ARCH) $(ARCHFLAGS) $@ $(ALLOBJ)
+       $(ARCH) $(ARCHFLAGS) $@ $^
        $(RANLIB) $@
 
 single: $(SMATGEN) $(SCATGEN)
-       $(ARCH) $(ARCHFLAGS) ../../$(TMGLIB) $(SMATGEN) $(SCATGEN)
+       $(ARCH) $(ARCHFLAGS) ../../$(TMGLIB) $^
        $(RANLIB) ../../$(TMGLIB)
 
 complex: $(CMATGEN) $(SCATGEN)
-       $(ARCH) $(ARCHFLAGS) ../../$(TMGLIB) $(CMATGEN) $(SCATGEN)
+       $(ARCH) $(ARCHFLAGS) ../../$(TMGLIB) $^
        $(RANLIB) ../../$(TMGLIB)
 
 double: $(DMATGEN) $(DZATGEN)
-       $(ARCH) $(ARCHFLAGS) ../../$(TMGLIB) $(DMATGEN) $(DZATGEN)
+       $(ARCH) $(ARCHFLAGS) ../../$(TMGLIB) $^
        $(RANLIB) ../../$(TMGLIB)
 
 complex16: $(ZMATGEN) $(DZATGEN)
-       $(ARCH) $(ARCHFLAGS) ../../$(TMGLIB) $(ZMATGEN) $(DZATGEN)
+       $(ARCH) $(ARCHFLAGS) ../../$(TMGLIB) $^
        $(RANLIB) ../../$(TMGLIB)
 
 $(SCATGEN): $(FRC)
@@ -87,8 +87,11 @@ $(ZMATGEN): $(FRC)
 FRC:
        @FRC=$(FRC)
 
-clean:
+clean: cleanobj cleanlib
+cleanobj:
        rm -f *.o
+cleanlib:
+       rm -f ../../$(TMGLIB)
 
 .f.o:
        $(FORTRAN) $(OPTS) -c -o $@ $<
index dfb5fc1..8b883c0 100644 (file)
 #  The executable files are called:
 #       xlintsts, xlintstd, xlintstc, and xlintstz for LIN
 #       xeigtsts, xeigtstd, xeigtstc, and xeigtstz for EIG
-#  and exist in the current directory level.
 #
 #  To remove the output files after the tests have been run, enter
-#       make clean
+#       make cleantest
 #
 #  To re-run specific tests after a make, enter (for example):
 #       'rm ssvd.out; make'  or:
 
 include ../make.inc
 
-ifneq ($(strip $(VARLIB)),)
-    LAPACKLIB := $(VARLIB) ../$(LAPACKLIB)
-endif
-
-
 all: single complex double complex16 singleproto doubleproto complexproto complex16proto
 
 SEIGTST= snep.out \
@@ -157,443 +151,441 @@ complex16proto: $(ZLINTSTPROTO)
 #
 # ======== SINGLE LIN TESTS ===========================
 
-stest.out: stest.in xlintsts
+stest.out: stest.in LIN/xlintsts
        @echo Testing REAL LAPACK linear equation routines
-       ./xlintsts < stest.in > $@ 2>&1
+       ./LIN/xlintsts < $< > $@ 2>&1
 #
 # ======== COMPLEX LIN TESTS ==========================
 
-ctest.out: ctest.in xlintstc
+ctest.out: ctest.in LIN/xlintstc
        @echo Testing COMPLEX LAPACK linear equation routines
-       ./xlintstc < ctest.in > $@ 2>&1
+       ./LIN/xlintstc < $< > $@ 2>&1
 #
 # ======== DOUBLE LIN TESTS ===========================
 
-dtest.out: dtest.in xlintstd
+dtest.out: dtest.in LIN/xlintstd
        @echo Testing DOUBLE PRECISION LAPACK linear equation routines
-       ./xlintstd < dtest.in > $@ 2>&1
+       ./LIN/xlintstd < $< > $@ 2>&1
 #
 # ======== COMPLEX16 LIN TESTS ========================
 
-ztest.out: ztest.in xlintstz
+ztest.out: ztest.in LIN/xlintstz
        @echo Testing COMPLEX16 LAPACK linear equation routines
-       ./xlintstz < ztest.in > $@ 2>&1
+       ./LIN/xlintstz < $< > $@ 2>&1
 #
 # ======== SINGLE-DOUBLE PROTO LIN TESTS ==============
 
-dstest.out: dstest.in xlintstds
+dstest.out: dstest.in LIN/xlintstds
        @echo Testing SINGLE-DOUBLE PRECISION LAPACK prototype linear equation routines
-       ./xlintstds < dstest.in > $@ 2>&1
+       ./LIN/xlintstds < $< > $@ 2>&1
 #
 # ======== COMPLEX-COMPLEX16 LIN TESTS ========================
 
-zctest.out: zctest.in xlintstzc
+zctest.out: zctest.in LIN/xlintstzc
        @echo Testing COMPLEX-COMPLEX16 LAPACK prototype linear equation routines
-       ./xlintstzc < zctest.in > $@ 2>&1
+       ./LIN/xlintstzc < $< > $@ 2>&1
 #
 # ======== SINGLE RFP LIN TESTS ========================
 
-stest_rfp.out: stest_rfp.in xlintstrfs
+stest_rfp.out: stest_rfp.in LIN/xlintstrfs
        @echo Testing REAL LAPACK RFP prototype linear equation routines
-       ./xlintstrfs < stest_rfp.in > $@ 2>&1
+       ./LIN/xlintstrfs < $< > $@ 2>&1
 #
 # ======== COMPLEX16 RFP LIN TESTS ========================
 
-dtest_rfp.out: dtest_rfp.in xlintstrfd
+dtest_rfp.out: dtest_rfp.in LIN/xlintstrfd
        @echo Testing DOUBLE PRECISION LAPACK RFP prototype linear equation routines
-       ./xlintstrfd < dtest_rfp.in > $@ 2>&1
+       ./LIN/xlintstrfd < $< > $@ 2>&1
 #
 # ======== COMPLEX16 RFP LIN TESTS ========================
 
-ctest_rfp.out: ctest_rfp.in xlintstrfc
+ctest_rfp.out: ctest_rfp.in LIN/xlintstrfc
        @echo Testing COMPLEX LAPACK RFP prototype linear equation routines
-       ./xlintstrfc < ctest_rfp.in > $@ 2>&1
+       ./LIN/xlintstrfc < $< > $@ 2>&1
 #
 # ======== COMPLEX16 RFP LIN TESTS ========================
 
-ztest_rfp.out: ztest_rfp.in xlintstrfz
+ztest_rfp.out: ztest_rfp.in LIN/xlintstrfz
        @echo Testing COMPLEX16 LAPACK RFP prototype linear equation routines
-       ./xlintstrfz < ztest_rfp.in > $@ 2>&1
+       ./LIN/xlintstrfz < $< > $@ 2>&1
 #
 #
 # ======== SINGLE EIG TESTS ===========================
 #
 
-snep.out: nep.in xeigtsts
+snep.out: nep.in EIG/xeigtsts
        @echo NEP: Testing Nonsymmetric Eigenvalue Problem routines
-       ./xeigtsts < nep.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-ssep.out: sep.in xeigtsts
+ssep.out: sep.in EIG/xeigtsts
        @echo SEP: Testing Symmetric Eigenvalue Problem routines
-       ./xeigtsts < sep.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-sse2.out: se2.in xeigtsts
+sse2.out: se2.in EIG/xeigtsts
        @echo SEP: Testing Symmetric Eigenvalue Problem routines
-       ./xeigtsts < se2.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-ssvd.out: svd.in xeigtsts
+ssvd.out: svd.in EIG/xeigtsts
        @echo SVD: Testing Singular Value Decomposition routines
-       ./xeigtsts < svd.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-sec.out: sec.in xeigtsts
+sec.out: sec.in EIG/xeigtsts
        @echo SEC: Testing REAL Eigen Condition Routines
-       ./xeigtsts < sec.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-sed.out: sed.in xeigtsts
+sed.out: sed.in EIG/xeigtsts
        @echo SEV: Testing REAL Nonsymmetric Eigenvalue Driver
-       ./xeigtsts < sed.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-sgg.out: sgg.in xeigtsts
+sgg.out: sgg.in EIG/xeigtsts
        @echo SGG: Testing REAL Nonsymmetric Generalized Eigenvalue Problem routines
-       ./xeigtsts < sgg.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-sgd.out: sgd.in xeigtsts
+sgd.out: sgd.in EIG/xeigtsts
        @echo SGD: Testing REAL Nonsymmetric Generalized Eigenvalue Problem driver routines
-       ./xeigtsts < sgd.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-ssb.out: ssb.in xeigtsts
+ssb.out: ssb.in EIG/xeigtsts
        @echo SSB: Testing REAL Symmetric Eigenvalue Problem routines
-       ./xeigtsts < ssb.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-ssg.out: ssg.in xeigtsts
+ssg.out: ssg.in EIG/xeigtsts
        @echo SSG: Testing REAL Symmetric Generalized Eigenvalue Problem routines
-       ./xeigtsts < ssg.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-sbal.out: sbal.in xeigtsts
+sbal.out: sbal.in EIG/xeigtsts
        @echo SGEBAL: Testing the balancing of a REAL general matrix
-       ./xeigtsts < sbal.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-sbak.out: sbak.in xeigtsts
+sbak.out: sbak.in EIG/xeigtsts
        @echo SGEBAK: Testing the back transformation of a REAL balanced matrix
-       ./xeigtsts < sbak.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-sgbal.out: sgbal.in xeigtsts
+sgbal.out: sgbal.in EIG/xeigtsts
        @echo SGGBAL: Testing the balancing of a pair of REAL general matrices
-       ./xeigtsts < sgbal.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-sgbak.out: sgbak.in xeigtsts
+sgbak.out: sgbak.in EIG/xeigtsts
        @echo SGGBAK: Testing the back transformation of a pair of REAL balanced matrices
-       ./xeigtsts < sgbak.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-sbb.out: sbb.in xeigtsts
+sbb.out: sbb.in EIG/xeigtsts
        @echo SBB: Testing banded Singular Value Decomposition routines
-       ./xeigtsts < sbb.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-sglm.out: glm.in xeigtsts
+sglm.out: glm.in EIG/xeigtsts
        @echo GLM: Testing Generalized Linear Regression Model routines
-       ./xeigtsts < glm.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-sgqr.out: gqr.in xeigtsts
+sgqr.out: gqr.in EIG/xeigtsts
        @echo GQR: Testing Generalized QR and RQ factorization routines
-       ./xeigtsts < gqr.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-sgsv.out: gsv.in xeigtsts
+sgsv.out: gsv.in EIG/xeigtsts
        @echo GSV: Testing Generalized Singular Value Decomposition routines
-       ./xeigtsts < gsv.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-scsd.out: csd.in xeigtsts
+scsd.out: csd.in EIG/xeigtsts
        @echo CSD: Testing CS Decomposition routines
-       ./xeigtsts < csd.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 
-slse.out: lse.in xeigtsts
+slse.out: lse.in EIG/xeigtsts
        @echo LSE: Testing Constrained Linear Least Squares routines
-       ./xeigtsts < lse.in > $@ 2>&1
+       ./EIG/xeigtsts < $< > $@ 2>&1
 #
 # ======== COMPLEX EIG TESTS ===========================
 
-cnep.out: nep.in xeigtstc
+cnep.out: nep.in EIG/xeigtstc
        @echo NEP: Testing Nonsymmetric Eigenvalue Problem routines
-       ./xeigtstc < nep.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-csep.out: sep.in xeigtstc
+csep.out: sep.in EIG/xeigtstc
        @echo SEP: Testing Symmetric Eigenvalue Problem routines
-       ./xeigtstc < sep.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-cse2.out: se2.in xeigtstc
+cse2.out: se2.in EIG/xeigtstc
        @echo SEP: Testing Symmetric Eigenvalue Problem routines
-       ./xeigtstc < se2.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-csvd.out: svd.in xeigtstc
+csvd.out: svd.in EIG/xeigtstc
        @echo SVD: Testing Singular Value Decomposition routines
-       ./xeigtstc < svd.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-cec.out: cec.in xeigtstc
+cec.out: cec.in EIG/xeigtstc
        @echo CEC: Testing COMPLEX Eigen Condition Routines
-       ./xeigtstc < cec.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-ced.out: ced.in xeigtstc
+ced.out: ced.in EIG/xeigtstc
        @echo CES: Testing COMPLEX Nonsymmetric Schur Form Driver
-       ./xeigtstc < ced.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-cgg.out: cgg.in xeigtstc
+cgg.out: cgg.in EIG/xeigtstc
        @echo CGG: Testing COMPLEX Nonsymmetric Generalized Eigenvalue Problem routines
-       ./xeigtstc < cgg.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-cgd.out: cgd.in xeigtstc
+cgd.out: cgd.in EIG/xeigtstc
        @echo CGD: Testing COMPLEX Nonsymmetric Generalized Eigenvalue Problem driver routines
-       ./xeigtstc < cgd.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-csb.out: csb.in xeigtstc
+csb.out: csb.in EIG/xeigtstc
        @echo CHB: Testing Hermitian Eigenvalue Problem routines
-       ./xeigtstc < csb.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-csg.out: csg.in xeigtstc
+csg.out: csg.in EIG/xeigtstc
        @echo CSG: Testing Symmetric Generalized Eigenvalue Problem routines
-       ./xeigtstc < csg.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-cbal.out: cbal.in xeigtstc
+cbal.out: cbal.in EIG/xeigtstc
        @echo CGEBAL: Testing the balancing of a COMPLEX general matrix
-       ./xeigtstc < cbal.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-cbak.out: cbak.in xeigtstc
+cbak.out: cbak.in EIG/xeigtstc
        @echo CGEBAK: Testing the back transformation of a COMPLEX balanced matrix
-       ./xeigtstc < cbak.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-cgbal.out: cgbal.in xeigtstc
+cgbal.out: cgbal.in EIG/xeigtstc
        @echo CGGBAL: Testing the balancing of a pair of COMPLEX general matrices
-       ./xeigtstc < cgbal.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-cgbak.out: cgbak.in xeigtstc
+cgbak.out: cgbak.in EIG/xeigtstc
        @echo CGGBAK: Testing the back transformation of a pair of COMPLEX balanced matrices
-       ./xeigtstc < cgbak.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-cbb.out: cbb.in xeigtstc
+cbb.out: cbb.in EIG/xeigtstc
        @echo CBB: Testing banded Singular Value Decomposition routines
-       ./xeigtstc < cbb.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-cglm.out: glm.in xeigtstc
+cglm.out: glm.in EIG/xeigtstc
        @echo GLM: Testing Generalized Linear Regression Model routines
-       ./xeigtstc < glm.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-cgqr.out: gqr.in xeigtstc
+cgqr.out: gqr.in EIG/xeigtstc
        @echo GQR: Testing Generalized QR and RQ factorization routines
-       ./xeigtstc < gqr.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-cgsv.out: gsv.in xeigtstc
+cgsv.out: gsv.in EIG/xeigtstc
        @echo GSV: Testing Generalized Singular Value Decomposition routines
-       ./xeigtstc < gsv.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-ccsd.out: csd.in xeigtstc
+ccsd.out: csd.in EIG/xeigtstc
        @echo CSD: Testing CS Decomposition routines
-       ./xeigtstc < csd.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 
-clse.out: lse.in xeigtstc
+clse.out: lse.in EIG/xeigtstc
        @echo LSE: Testing Constrained Linear Least Squares routines
-       ./xeigtstc < lse.in > $@ 2>&1
+       ./EIG/xeigtstc < $< > $@ 2>&1
 #
 # ======== DOUBLE EIG TESTS ===========================
 
-dnep.out: nep.in xeigtstd
+dnep.out: nep.in EIG/xeigtstd
        @echo NEP: Testing Nonsymmetric Eigenvalue Problem routines
-       ./xeigtstd < nep.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dsep.out: sep.in xeigtstd
+dsep.out: sep.in EIG/xeigtstd
        @echo SEP: Testing Symmetric Eigenvalue Problem routines
-       ./xeigtstd < sep.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dse2.out: se2.in xeigtstd
+dse2.out: se2.in EIG/xeigtstd
        @echo SEP: Testing Symmetric Eigenvalue Problem routines
-       ./xeigtstd < se2.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dsvd.out: svd.in xeigtstd
+dsvd.out: svd.in EIG/xeigtstd
        @echo SVD: Testing Singular Value Decomposition routines
-       ./xeigtstd < svd.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dec.out: dec.in xeigtstd
+dec.out: dec.in EIG/xeigtstd
        @echo DEC: Testing DOUBLE PRECISION Eigen Condition Routines
-       ./xeigtstd < dec.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-ded.out: ded.in xeigtstd
+ded.out: ded.in EIG/xeigtstd
        @echo DEV: Testing DOUBLE PRECISION Nonsymmetric Eigenvalue Driver
-       ./xeigtstd < ded.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dgg.out: dgg.in xeigtstd
+dgg.out: dgg.in EIG/xeigtstd
        @echo DGG: Testing DOUBLE PRECISION Nonsymmetric Generalized Eigenvalue Problem routines
-       ./xeigtstd < dgg.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dgd.out: dgd.in xeigtstd
+dgd.out: dgd.in EIG/xeigtstd
        @echo DGD: Testing DOUBLE PRECISION Nonsymmetric Generalized Eigenvalue Problem driver routines
-       ./xeigtstd < dgd.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dsb.out: dsb.in xeigtstd
+dsb.out: dsb.in EIG/xeigtstd
        @echo DSB: Testing DOUBLE PRECISION Symmetric Eigenvalue Problem routines
-       ./xeigtstd < dsb.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dsg.out: dsg.in xeigtstd
+dsg.out: dsg.in EIG/xeigtstd
        @echo DSG: Testing DOUBLE PRECISION Symmetric Generalized Eigenvalue Problem routines
-       ./xeigtstd < dsg.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dbal.out: dbal.in xeigtstd
+dbal.out: dbal.in EIG/xeigtstd
        @echo DGEBAL: Testing the balancing of a DOUBLE PRECISION general matrix
-       ./xeigtstd < dbal.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dbak.out: dbak.in xeigtstd
+dbak.out: dbak.in EIG/xeigtstd
        @echo DGEBAK: Testing the back transformation of a DOUBLE PRECISION balanced matrix
-       ./xeigtstd < dbak.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dgbal.out: dgbal.in xeigtstd
+dgbal.out: dgbal.in EIG/xeigtstd
        @echo DGGBAL: Testing the balancing of a pair of DOUBLE PRECISION general matrices
-       ./xeigtstd < dgbal.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dgbak.out: dgbak.in xeigtstd
+dgbak.out: dgbak.in EIG/xeigtstd
        @echo DGGBAK: Testing the back transformation of a pair of DOUBLE PRECISION balanced matrices
-       ./xeigtstd < dgbak.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dbb.out: dbb.in xeigtstd
+dbb.out: dbb.in EIG/xeigtstd
        @echo DBB: Testing banded Singular Value Decomposition routines
-       ./xeigtstd < dbb.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dglm.out: glm.in xeigtstd
+dglm.out: glm.in EIG/xeigtstd
        @echo GLM: Testing Generalized Linear Regression Model routines
-       ./xeigtstd < glm.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dgqr.out: gqr.in xeigtstd
+dgqr.out: gqr.in EIG/xeigtstd
        @echo GQR: Testing Generalized QR and RQ factorization routines
-       ./xeigtstd < gqr.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dgsv.out: gsv.in xeigtstd
+dgsv.out: gsv.in EIG/xeigtstd
        @echo GSV: Testing Generalized Singular Value Decomposition routines
-       ./xeigtstd < gsv.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dcsd.out: csd.in xeigtstd
+dcsd.out: csd.in EIG/xeigtstd
        @echo CSD: Testing CS Decomposition routines
-       ./xeigtstd < csd.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 
-dlse.out: lse.in xeigtstd
+dlse.out: lse.in EIG/xeigtstd
        @echo LSE: Testing Constrained Linear Least Squares routines
-       ./xeigtstd < lse.in > $@ 2>&1
+       ./EIG/xeigtstd < $< > $@ 2>&1
 #
 # ======== COMPLEX16 EIG TESTS ===========================
 
-znep.out: nep.in xeigtstz
+znep.out: nep.in EIG/xeigtstz
        @echo NEP: Testing Nonsymmetric Eigenvalue Problem routines
-       ./xeigtstz < nep.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zsep.out: sep.in xeigtstz
+zsep.out: sep.in EIG/xeigtstz
        @echo SEP: Testing Symmetric Eigenvalue Problem routines
-       ./xeigtstz < sep.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zse2.out: se2.in xeigtstz
+zse2.out: se2.in EIG/xeigtstz
        @echo SEP: Testing Symmetric Eigenvalue Problem routines
-       ./xeigtstz < se2.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zsvd.out: svd.in xeigtstz
+zsvd.out: svd.in EIG/xeigtstz
        @echo SVD: Testing Singular Value Decomposition routines
-       ./xeigtstz < svd.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zec.out: zec.in xeigtstz
+zec.out: zec.in EIG/xeigtstz
        @echo ZEC: Testing COMPLEX16 Eigen Condition Routines
-       ./xeigtstz < zec.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zed.out: zed.in xeigtstz
+zed.out: zed.in EIG/xeigtstz
        @echo ZES: Testing COMPLEX16 Nonsymmetric Schur Form Driver
-       ./xeigtstz < zed.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zgg.out: zgg.in xeigtstz
+zgg.out: zgg.in EIG/xeigtstz
        @echo ZGG: Testing COMPLEX16 Nonsymmetric Generalized Eigenvalue Problem routines
-       ./xeigtstz < zgg.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zgd.out: zgd.in xeigtstz
+zgd.out: zgd.in EIG/xeigtstz
        @echo ZGD: Testing COMPLEX16 Nonsymmetric Generalized Eigenvalue Problem driver routines
-       ./xeigtstz < zgd.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zsb.out: zsb.in xeigtstz
+zsb.out: zsb.in EIG/xeigtstz
        @echo ZHB: Testing Hermitian Eigenvalue Problem routines
-       ./xeigtstz < zsb.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zsg.out: zsg.in xeigtstz
+zsg.out: zsg.in EIG/xeigtstz
        @echo ZSG: Testing Symmetric Generalized Eigenvalue Problem routines
-       ./xeigtstz < zsg.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zbal.out: zbal.in xeigtstz
+zbal.out: zbal.in EIG/xeigtstz
        @echo ZGEBAL: Testing the balancing of a COMPLEX16 general matrix
-       ./xeigtstz < zbal.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zbak.out: zbak.in xeigtstz
+zbak.out: zbak.in EIG/xeigtstz
        @echo ZGEBAK: Testing the back transformation of a COMPLEX16 balanced matrix
-       ./xeigtstz < zbak.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zgbal.out: zgbal.in xeigtstz
+zgbal.out: zgbal.in EIG/xeigtstz
        @echo ZGGBAL: Testing the balancing of a pair of COMPLEX general matrices
-       ./xeigtstz < zgbal.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zgbak.out: zgbak.in xeigtstz
+zgbak.out: zgbak.in EIG/xeigtstz
        @echo ZGGBAK: Testing the back transformation of a pair of COMPLEX16 balanced matrices
-       ./xeigtstz < zgbak.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zbb.out: zbb.in xeigtstz
+zbb.out: zbb.in EIG/xeigtstz
        @echo ZBB: Testing banded Singular Value Decomposition routines
-       ./xeigtstz < zbb.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zglm.out: glm.in xeigtstz
+zglm.out: glm.in EIG/xeigtstz
        @echo GLM: Testing Generalized Linear Regression Model routines
-       ./xeigtstz < glm.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zgqr.out: gqr.in xeigtstz
+zgqr.out: gqr.in EIG/xeigtstz
        @echo GQR: Testing Generalized QR and RQ factorization routines
-       ./xeigtstz < gqr.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zgsv.out: gsv.in xeigtstz
+zgsv.out: gsv.in EIG/xeigtstz
        @echo GSV: Testing Generalized Singular Value Decomposition routines
-       ./xeigtstz < gsv.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zcsd.out: csd.in xeigtstz
+zcsd.out: csd.in EIG/xeigtstz
        @echo CSD: Testing CS Decomposition routines
-       ./xeigtstz < csd.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 
-zlse.out: lse.in xeigtstz
+zlse.out: lse.in EIG/xeigtstz
        @echo LSE: Testing Constrained Linear Least Squares routines
-       ./xeigtstz < lse.in > $@ 2>&1
+       ./EIG/xeigtstz < $< > $@ 2>&1
 # ==============================================================================
 
-xlintsts: ../$(LAPACKLIB) ../$(TMGLIB) $(FRCLIN) $(FRC)
-       cd LIN ; $(MAKE) single
+LIN/xlintsts: $(FRCLIN) $(FRC)
+       $(MAKE) -C LIN xlintsts
 
-xlintstc: ../$(LAPACKLIB) ../$(TMGLIB) $(FRCLIN) $(FRC)
-       cd LIN ; $(MAKE) complex
+LIN/xlintstc: $(FRCLIN) $(FRC)
+       $(MAKE) -C LIN xlintstc
 
-xlintstd: ../$(LAPACKLIB) ../$(TMGLIB) $(FRCLIN) $(FRC)
-       cd LIN ; $(MAKE) double
+LIN/xlintstd: $(FRCLIN) $(FRC)
+       $(MAKE) -C LIN xlintstd
 
-xlintstz: ../$(LAPACKLIB) ../$(TMGLIB) $(FRCLIN) $(FRC)
-       cd LIN ; $(MAKE) complex16
+LIN/xlintstz: $(FRCLIN) $(FRC)
+       $(MAKE) -C LIN xlintstz
 
-xlintstrfs: ../$(LAPACKLIB) ../$(TMGLIB) $(FRCLIN) $(FRC)
-       cd LIN ; $(MAKE) proto-single
+LIN/xlintstrfs: $(FRCLIN) $(FRC)
+       $(MAKE) -C LIN xlintstrfs
 
-xlintstrfc: ../$(LAPACKLIB) ../$(TMGLIB) $(FRCLIN) $(FRC)
-       cd LIN ; $(MAKE) proto-complex
+LIN/xlintstrfc: $(FRCLIN) $(FRC)
+       $(MAKE) -C LIN xlintstrfc
 
-xlintstrfd: ../$(LAPACKLIB) ../$(TMGLIB) $(FRCLIN) $(FRC)
-       cd LIN ; $(MAKE) proto-double
+LIN/xlintstrfd: $(FRCLIN) $(FRC)
+       $(MAKE) -C LIN xlintstrfd
 
-xlintstrfz: ../$(LAPACKLIB) ../$(TMGLIB) $(FRCLIN) $(FRC)
-       cd LIN ; $(MAKE) proto-complex16
+LIN/xlintstrfz: $(FRCLIN) $(FRC)
+       $(MAKE) -C LIN xlintstrfz
 
-xlintstds: ../$(LAPACKLIB) ../$(TMGLIB) $(FRCLIN) $(FRC)
-       cd LIN ; $(MAKE) proto-double
+LIN/xlintstds: $(FRCLIN) $(FRC)
+       $(MAKE) -C LIN xlintstds
 
-xlintstzc: ../$(LAPACKLIB) ../$(TMGLIB) $(FRCLIN) $(FRC)
-       cd LIN ; $(MAKE) proto-complex16
+LIN/xlintstzc: $(FRCLIN) $(FRC)
+       $(MAKE) -C LIN xlintstzc
 
-xeigtsts: ../$(LAPACKLIB) ../$(TMGLIB) $(FRCEIG) $(FRC)
-       cd EIG ; $(MAKE) single
+EIG/xeigtsts: $(FRCEIG) $(FRC)
+       $(MAKE) -C EIG xeigtsts
 
-xeigtstc: ../$(LAPACKLIB) ../$(TMGLIB) $(FRCEIG) $(FRC)
-       cd EIG ; $(MAKE) complex
+EIG/xeigtstc: $(FRCEIG) $(FRC)
+       $(MAKE) -C EIG xeigtstc
 
-xeigtstd: ../$(LAPACKLIB) ../$(TMGLIB) $(FRCEIG) $(FRC)
-       cd EIG ; $(MAKE) double
+EIG/xeigtstd: $(FRCEIG) $(FRC)
+       $(MAKE) -C EIG xeigtstd
 
-xeigtstz: ../$(LAPACKLIB) ../$(TMGLIB) $(FRCEIG) $(FRC)
-       cd EIG ; $(MAKE) complex16
+EIG/xeigtstz: $(FRCEIG) $(FRC)
+       $(MAKE) -C EIG xeigtstz
 
-clean:
+clean: cleantest
+cleantest:
        rm -f *.out core
 
-cleanup:
-       rm -f x* *.out core
-
 FRCLIN:
        @FRCLIN=$(FRCLIN)