192
193
194
195
196
197
198 LOGICAL TSTERR
199 INTEGER NM, NN, NNB, NNS, NOUT
200 DOUBLE PRECISION THRESH
201
202
203 LOGICAL DOTYPE( * )
204 INTEGER MVAL( * ), NBVAL( * ), NSVAL( * ),
205 $ NVAL( * ), NXVAL( * )
206 DOUBLE PRECISION COPYS( * ), S( * )
207 COMPLEX*16 A( * ), B( * ), C( * ), COPYA( * ), COPYB( * )
208
209
210
211
212
213 INTEGER NTESTS
214 parameter( ntests = 18 )
215 INTEGER SMLSIZ
216 parameter( smlsiz = 25 )
217 DOUBLE PRECISION ONE, ZERO
218 parameter( one = 1.0d+0, zero = 0.0d+0 )
219 COMPLEX*16 CONE, CZERO
220 parameter( cone = ( 1.0d+0, 0.0d+0 ),
221 $ czero = ( 0.0d+0, 0.0d+0 ) )
222
223
224 CHARACTER TRANS
225 CHARACTER*3 PATH
226 INTEGER CRANK, I, IM, IMB, IN, INB, INFO, INS, IRANK,
227 $ ISCALE, ITRAN, ITYPE, J, K, LDA, LDB, LDWORK,
228 $ LWLSY, LWORK, M, MNMIN, N, NB, NCOLS, NERRS,
229 $ NFAIL, NRHS, NROWS, NRUN, RANK, MB,
230 $ MMAX, NMAX, NSMAX, LIWORK, LRWORK,
231 $ LWORK_ZGELS, LWORK_ZGELST, LWORK_ZGETSLS,
232 $ LWORK_ZGELSS, LWORK_ZGELSY, LWORK_ZGELSD,
233 $ LRWORK_ZGELSY, LRWORK_ZGELSS, LRWORK_ZGELSD
234 DOUBLE PRECISION EPS, NORMA, NORMB, RCOND
235
236
237 INTEGER ISEED( 4 ), ISEEDY( 4 ), IWQ( 1 )
238 DOUBLE PRECISION RESULT( NTESTS ), RWQ( 1 )
239 COMPLEX*16 WQ( 1 )
240
241
242 COMPLEX*16, ALLOCATABLE :: WORK (:)
243 DOUBLE PRECISION, ALLOCATABLE :: RWORK (:), WORK2 (:)
244 INTEGER, ALLOCATABLE :: IWORK (:)
245
246
247 DOUBLE PRECISION DASUM, DLAMCH, ZQRT12, ZQRT14, ZQRT17
249
250
255
256
257 INTRINSIC dble, max, min, int, sqrt
258
259
260 LOGICAL LERR, OK
261 CHARACTER*32 SRNAMT
262 INTEGER INFOT, IOUNIT
263
264
265 COMMON / infoc / infot, iounit, ok, lerr
266 COMMON / srnamc / srnamt
267
268
269 DATA iseedy / 1988, 1989, 1990, 1991 /
270
271
272
273
274
275 path( 1: 1 ) = 'Zomplex precision'
276 path( 2: 3 ) = 'LS'
277 nrun = 0
278 nfail = 0
279 nerrs = 0
280 DO 10 i = 1, 4
281 iseed( i ) = iseedy( i )
282 10 CONTINUE
284
285
286
287 rcond = sqrt( eps ) - ( sqrt( eps )-eps ) / 2
288
289
290
292 IF( tsterr )
293 $
CALL zerrls( path, nout )
294
295
296
297 IF( ( nm.EQ.0 .OR. nn.EQ.0 ) .AND. thresh.EQ.zero )
298 $
CALL alahd( nout, path )
299 infot = 0
300
301
302
303 nmax = 0
304 mmax = 0
305 nsmax = 0
306 DO i = 1, nm
307 IF ( mval( i ).GT.mmax ) THEN
308 mmax = mval( i )
309 END IF
310 ENDDO
311 DO i = 1, nn
312 IF ( nval( i ).GT.nmax ) THEN
313 nmax = nval( i )
314 END IF
315 ENDDO
316 DO i = 1, nns
317 IF ( nsval( i ).GT.nsmax ) THEN
318 nsmax = nsval( i )
319 END IF
320 ENDDO
321 m = mmax
322 n = nmax
323 nrhs = nsmax
324 mnmin = max( min( m, n ), 1 )
325
326
327
328
329 lwork = max( 1, ( m+n )*nrhs,
330 $ ( n+nrhs )*( m+2 ), ( m+nrhs )*( n+2 ),
331 $ max( m+mnmin, nrhs*mnmin,2*n+m ),
332 $ max( m*n+4*mnmin+max(m,n), m*n+2*mnmin+4*n ) )
333 lrwork = 1
334 liwork = 1
335
336
337
338
339
340 DO im = 1, nm
341 m = mval( im )
342 lda = max( 1, m )
343 DO in = 1, nn
344 n = nval( in )
345 mnmin = max(min( m, n ),1)
346 ldb = max( 1, m, n )
347 DO ins = 1, nns
348 nrhs = nsval( ins )
349 DO irank = 1, 2
350 DO iscale = 1, 3
351 itype = ( irank-1 )*3 + iscale
352 IF( dotype( itype ) ) THEN
353 IF( irank.EQ.1 ) THEN
354 DO itran = 1, 2
355 IF( itran.EQ.1 ) THEN
356 trans = 'N'
357 ELSE
358 trans = 'C'
359 END IF
360
361
362 CALL zgels( trans, m, n, nrhs, a, lda,
363 $ b, ldb, wq, -1, info )
364 lwork_zgels = int( wq( 1 ) )
365
366 CALL zgelst( trans, m, n, nrhs, a, lda,
367 $ b, ldb, wq, -1, info )
368 lwork_zgelst = int( wq( 1 ) )
369
370 CALL zgetsls( trans, m, n, nrhs, a, lda,
371 $ b, ldb, wq, -1, info )
372 lwork_zgetsls = int( wq( 1 ) )
373 ENDDO
374 END IF
375
376 CALL zgelsy( m, n, nrhs, a, lda, b, ldb, iwq,
377 $ rcond, crank, wq, -1, rwq, info )
378 lwork_zgelsy = int( wq( 1 ) )
379 lrwork_zgelsy = 2*n
380
381 CALL zgelss( m, n, nrhs, a, lda, b, ldb, s,
382 $ rcond, crank, wq, -1 , rwq,
383 $ info )
384 lwork_zgelss = int( wq( 1 ) )
385 lrwork_zgelss = 5*mnmin
386
387 CALL zgelsd( m, n, nrhs, a, lda, b, ldb, s,
388 $ rcond, crank, wq, -1, rwq, iwq,
389 $ info )
390 lwork_zgelsd = int( wq( 1 ) )
391 lrwork_zgelsd = int( rwq( 1 ) )
392
393 liwork = max( liwork, n, iwq( 1 ) )
394
395 lrwork = max( lrwork, lrwork_zgelsy,
396 $ lrwork_zgelss, lrwork_zgelsd )
397
398 lwork = max( lwork, lwork_zgels, lwork_zgelst,
399 $ lwork_zgetsls, lwork_zgelsy,
400 $ lwork_zgelss, lwork_zgelsd )
401 END IF
402 ENDDO
403 ENDDO
404 ENDDO
405 ENDDO
406 ENDDO
407
408 lwlsy = lwork
409
410 ALLOCATE( work( lwork ) )
411 ALLOCATE( work2( 2 * lwork ) )
412 ALLOCATE( iwork( liwork ) )
413 ALLOCATE( rwork( lrwork ) )
414
415 DO 140 im = 1, nm
416 m = mval( im )
417 lda = max( 1, m )
418
419 DO 130 in = 1, nn
420 n = nval( in )
421 mnmin = max(min( m, n ),1)
422 ldb = max( 1, m, n )
423 mb = (mnmin+1)
424
425 DO 120 ins = 1, nns
426 nrhs = nsval( ins )
427
428 DO 110 irank = 1, 2
429 DO 100 iscale = 1, 3
430 itype = ( irank-1 )*3 + iscale
431 IF( .NOT.dotype( itype ) )
432 $ GO TO 100
433
434
435
436 IF( irank.EQ.1 ) THEN
437
438
439
440 CALL zqrt13( iscale, m, n, copya, lda, norma,
441 $ iseed )
442
443
444
445 DO inb = 1, nnb
446 nb = nbval( inb )
448 CALL xlaenv( 3, nxval( inb ) )
449
450
451
452 DO itran = 1, 2
453 IF( itran.EQ.1 ) THEN
454 trans = 'N'
455 nrows = m
456 ncols = n
457 ELSE
458 trans = 'C'
459 nrows = n
460 ncols = m
461 END IF
462 ldwork = max( 1, ncols )
463
464
465
466 IF( ncols.GT.0 ) THEN
467 CALL zlarnv( 2, iseed, ncols*nrhs,
468 $ work )
470 $ one / dble( ncols ), work,
471 $ 1 )
472 END IF
473 CALL zgemm( trans,
'No transpose', nrows,
474 $ nrhs, ncols, cone, copya, lda,
475 $ work, ldwork, czero, b, ldb )
476 CALL zlacpy(
'Full', nrows, nrhs, b, ldb,
477 $ copyb, ldb )
478
479
480
481 IF( m.GT.0 .AND. n.GT.0 ) THEN
482 CALL zlacpy(
'Full', m, n, copya, lda,
483 $ a, lda )
484 CALL zlacpy(
'Full', nrows, nrhs,
485 $ copyb, ldb, b, ldb )
486 END IF
487 srnamt = 'ZGELS '
488 CALL zgels( trans, m, n, nrhs, a, lda, b,
489 $ ldb, work, lwork, info )
490
491 IF( info.NE.0 )
492 $
CALL alaerh( path,
'ZGELS ', info, 0,
493 $ trans, m, n, nrhs, -1, nb,
494 $ itype, nfail, nerrs,
495 $ nout )
496
497
498
499
500
501
502 IF( nrows.GT.0 .AND. nrhs.GT.0 )
503 $
CALL zlacpy(
'Full', nrows, nrhs,
504 $ copyb, ldb, c, ldb )
505 CALL zqrt16( trans, m, n, nrhs, copya,
506 $ lda, b, ldb, c, ldb, rwork,
507 $ result( 1 ) )
508
509
510
511
512 IF( ( itran.EQ.1 .AND. m.GE.n ) .OR.
513 $ ( itran.EQ.2 .AND. m.LT.n ) ) THEN
514
515
516
517 result( 2 ) =
zqrt17( trans, 1, m, n,
518 $ nrhs, copya, lda, b, ldb,
519 $ copyb, ldb, c, work,
520 $ lwork )
521 ELSE
522
523
524
525 result( 2 ) =
zqrt14( trans, m, n,
526 $ nrhs, copya, lda, b, ldb,
527 $ work, lwork )
528 END IF
529
530
531
532
533 DO k = 1, 2
534 IF( result( k ).GE.thresh ) THEN
535 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
536 $
CALL alahd( nout, path )
537 WRITE( nout, fmt = 9999 )trans, m,
538 $ n, nrhs, nb, itype, k,
539 $ result( k )
540 nfail = nfail + 1
541 END IF
542 END DO
543 nrun = nrun + 2
544 END DO
545 END DO
546 END IF
547
548
549
550
551
552
553 IF( irank.EQ.1 ) THEN
554
555
556
557 CALL zqrt13( iscale, m, n, copya, lda, norma,
558 $ iseed )
559
560
561
562 DO inb = 1, nnb
563 nb = nbval( inb )
565 CALL xlaenv( 3, nxval( inb ) )
566
567
568
569 DO itran = 1, 2
570 IF( itran.EQ.1 ) THEN
571 trans = 'N'
572 nrows = m
573 ncols = n
574 ELSE
575 trans = 'C'
576 nrows = n
577 ncols = m
578 END IF
579 ldwork = max( 1, ncols )
580
581
582
583 IF( ncols.GT.0 ) THEN
584 CALL zlarnv( 2, iseed, ncols*nrhs,
585 $ work )
587 $ one / dble( ncols ), work,
588 $ 1 )
589 END IF
590 CALL zgemm( trans,
'No transpose', nrows,
591 $ nrhs, ncols, cone, copya, lda,
592 $ work, ldwork, czero, b, ldb )
593 CALL zlacpy(
'Full', nrows, nrhs, b, ldb,
594 $ copyb, ldb )
595
596
597
598 IF( m.GT.0 .AND. n.GT.0 ) THEN
599 CALL zlacpy(
'Full', m, n, copya, lda,
600 $ a, lda )
601 CALL zlacpy(
'Full', nrows, nrhs,
602 $ copyb, ldb, b, ldb )
603 END IF
604 srnamt = 'ZGELST'
605 CALL zgelst( trans, m, n, nrhs, a, lda, b,
606 $ ldb, work, lwork, info )
607
608 IF( info.NE.0 )
609 $
CALL alaerh( path,
'ZGELST', info, 0,
610 $ trans, m, n, nrhs, -1, nb,
611 $ itype, nfail, nerrs,
612 $ nout )
613
614
615
616
617
618
619 IF( nrows.GT.0 .AND. nrhs.GT.0 )
620 $
CALL zlacpy(
'Full', nrows, nrhs,
621 $ copyb, ldb, c, ldb )
622 CALL zqrt16( trans, m, n, nrhs, copya,
623 $ lda, b, ldb, c, ldb, rwork,
624 $ result( 3 ) )
625
626
627
628
629 IF( ( itran.EQ.1 .AND. m.GE.n ) .OR.
630 $ ( itran.EQ.2 .AND. m.LT.n ) ) THEN
631
632
633
634 result( 4 ) =
zqrt17( trans, 1, m, n,
635 $ nrhs, copya, lda, b, ldb,
636 $ copyb, ldb, c, work,
637 $ lwork )
638 ELSE
639
640
641
642 result( 4 ) =
zqrt14( trans, m, n,
643 $ nrhs, copya, lda, b, ldb,
644 $ work, lwork )
645 END IF
646
647
648
649
650 DO k = 3, 4
651 IF( result( k ).GE.thresh ) THEN
652 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
653 $
CALL alahd( nout, path )
654 WRITE( nout, fmt = 9999 )trans, m,
655 $ n, nrhs, nb, itype, k,
656 $ result( k )
657 nfail = nfail + 1
658 END IF
659 END DO
660 nrun = nrun + 2
661 END DO
662 END DO
663 END IF
664
665
666
667
668
669
670 IF( irank.EQ.1 ) THEN
671
672
673
674 CALL zqrt13( iscale, m, n, copya, lda, norma,
675 $ iseed )
676
677
678
679 DO inb = 1, nnb
680 mb = nbval( inb )
682
683
684
685 DO imb = 1, nnb
686 nb = nbval( imb )
688
689
690
691
692 DO itran = 1, 2
693 IF( itran.EQ.1 ) THEN
694 trans = 'N'
695 nrows = m
696 ncols = n
697 ELSE
698 trans = 'C'
699 nrows = n
700 ncols = m
701 END IF
702 ldwork = max( 1, ncols )
703
704
705
706 IF( ncols.GT.0 ) THEN
707 CALL zlarnv( 2, iseed, ncols*nrhs,
708 $ work )
709 CALL zscal( ncols*nrhs,
710 $ cone / dble( ncols ),
711 $ work, 1 )
712 END IF
713 CALL zgemm( trans,
'No transpose',
714 $ nrows, nrhs, ncols, cone,
715 $ copya, lda, work, ldwork,
716 $ czero, b, ldb )
717 CALL zlacpy(
'Full', nrows, nrhs,
718 $ b, ldb, copyb, ldb )
719
720
721
722 IF( m.GT.0 .AND. n.GT.0 ) THEN
723 CALL zlacpy(
'Full', m, n,
724 $ copya, lda, a, lda )
725 CALL zlacpy(
'Full', nrows, nrhs,
726 $ copyb, ldb, b, ldb )
727 END IF
728 srnamt = 'ZGETSLS '
729 CALL zgetsls( trans, m, n, nrhs, a,
730 $ lda, b, ldb, work, lwork,
731 $ info )
732 IF( info.NE.0 )
733 $
CALL alaerh( path,
'ZGETSLS ', info,
734 $ 0, trans, m, n, nrhs,
735 $ -1, nb, itype, nfail,
736 $ nerrs, nout )
737
738
739
740
741
742
743 IF( nrows.GT.0 .AND. nrhs.GT.0 )
744 $
CALL zlacpy(
'Full', nrows, nrhs,
745 $ copyb, ldb, c, ldb )
746 CALL zqrt16( trans, m, n, nrhs,
747 $ copya, lda, b, ldb,
748 $ c, ldb, work2,
749 $ result( 5 ) )
750
751
752
753
754 IF( ( itran.EQ.1 .AND. m.GE.n ) .OR.
755 $ ( itran.EQ.2 .AND. m.LT.n ) ) THEN
756
757
758
759
760
761 result( 6 ) =
zqrt17( trans, 1, m,
762 $ n, nrhs, copya, lda,
763 $ b, ldb, copyb, ldb,
764 $ c, work, lwork )
765 ELSE
766
767
768
769 result( 6 ) =
zqrt14( trans, m, n,
770 $ nrhs, copya, lda, b,
771 $ ldb, work, lwork )
772 END IF
773
774
775
776
777 DO k = 5, 6
778 IF( result( k ).GE.thresh ) THEN
779 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
780 $
CALL alahd( nout, path )
781 WRITE( nout, fmt = 9997 )trans,
782 $ m, n, nrhs, mb, nb, itype, k,
783 $ result( k )
784 nfail = nfail + 1
785 END IF
786 END DO
787 nrun = nrun + 2
788 END DO
789 END DO
790 END DO
791 END IF
792
793
794
795
796
797
798
799 CALL zqrt15( iscale, irank, m, n, nrhs, copya, lda,
800 $ copyb, ldb, copys, rank, norma, normb,
801 $ iseed, work, lwork )
802
803
804
805 ldwork = max( 1, m )
806
807
808
809 DO 90 inb = 1, nnb
810 nb = nbval( inb )
812 CALL xlaenv( 3, nxval( inb ) )
813
814
815
816
817
818
819
820
821 CALL zlacpy(
'Full', m, n, copya, lda, a, lda )
822 CALL zlacpy(
'Full', m, nrhs, copyb, ldb, b,
823 $ ldb )
824
825
826
827 DO 70 j = 1, n
828 iwork( j ) = 0
829 70 CONTINUE
830
831 srnamt = 'ZGELSY'
832 CALL zgelsy( m, n, nrhs, a, lda, b, ldb, iwork,
833 $ rcond, crank, work, lwlsy, rwork,
834 $ info )
835 IF( info.NE.0 )
836 $
CALL alaerh( path,
'ZGELSY', info, 0,
' ', m,
837 $ n, nrhs, -1, nb, itype, nfail,
838 $ nerrs, nout )
839
840
841
842
843
844
845 result( 7 ) =
zqrt12( crank, crank, a, lda,
846 $ copys, work, lwork, rwork )
847
848
849
850
851 CALL zlacpy(
'Full', m, nrhs, copyb, ldb, work,
852 $ ldwork )
853 CALL zqrt16(
'No transpose', m, n, nrhs, copya,
854 $ lda, b, ldb, work, ldwork, rwork,
855 $ result( 8 ) )
856
857
858
859
860 result( 9 ) = zero
861 IF( m.GT.crank )
862 $ result( 9 ) =
zqrt17(
'No transpose', 1, m,
863 $ n, nrhs, copya, lda, b, ldb,
864 $ copyb, ldb, c, work, lwork )
865
866
867
868
869 result( 10 ) = zero
870
871 IF( n.GT.crank )
872 $ result( 10 ) =
zqrt14(
'No transpose', m, n,
873 $ nrhs, copya, lda, b, ldb,
874 $ work, lwork )
875
876
877
878
879
880
881
882 CALL zlacpy(
'Full', m, n, copya, lda, a, lda )
883 CALL zlacpy(
'Full', m, nrhs, copyb, ldb, b,
884 $ ldb )
885 srnamt = 'ZGELSS'
886 CALL zgelss( m, n, nrhs, a, lda, b, ldb, s,
887 $ rcond, crank, work, lwork, rwork,
888 $ info )
889
890 IF( info.NE.0 )
891 $
CALL alaerh( path,
'ZGELSS', info, 0,
' ', m,
892 $ n, nrhs, -1, nb, itype, nfail,
893 $ nerrs, nout )
894
895
896
897
898
899
900 IF( rank.GT.0 ) THEN
901 CALL daxpy( mnmin, -one, copys, 1, s, 1 )
902 result( 11 ) =
dasum( mnmin, s, 1 ) /
903 $
dasum( mnmin, copys, 1 ) /
904 $ ( eps*dble( mnmin ) )
905 ELSE
906 result( 11 ) = zero
907 END IF
908
909
910
911 CALL zlacpy(
'Full', m, nrhs, copyb, ldb, work,
912 $ ldwork )
913 CALL zqrt16(
'No transpose', m, n, nrhs, copya,
914 $ lda, b, ldb, work, ldwork, rwork,
915 $ result( 12 ) )
916
917
918
919 result( 13 ) = zero
920 IF( m.GT.crank )
921 $ result( 13 ) =
zqrt17(
'No transpose', 1, m,
922 $ n, nrhs, copya, lda, b, ldb,
923 $ copyb, ldb, c, work, lwork )
924
925
926
927 result( 14 ) = zero
928 IF( n.GT.crank )
929 $ result( 14 ) =
zqrt14(
'No transpose', m, n,
930 $ nrhs, copya, lda, b, ldb,
931 $ work, lwork )
932
933
934
935
936
937
938
940
941 CALL zlacpy(
'Full', m, n, copya, lda, a, lda )
942 CALL zlacpy(
'Full', m, nrhs, copyb, ldb, b,
943 $ ldb )
944
945 srnamt = 'ZGELSD'
946 CALL zgelsd( m, n, nrhs, a, lda, b, ldb, s,
947 $ rcond, crank, work, lwork, rwork,
948 $ iwork, info )
949 IF( info.NE.0 )
950 $
CALL alaerh( path,
'ZGELSD', info, 0,
' ', m,
951 $ n, nrhs, -1, nb, itype, nfail,
952 $ nerrs, nout )
953
954
955
956 IF( rank.GT.0 ) THEN
957 CALL daxpy( mnmin, -one, copys, 1, s, 1 )
958 result( 15 ) =
dasum( mnmin, s, 1 ) /
959 $
dasum( mnmin, copys, 1 ) /
960 $ ( eps*dble( mnmin ) )
961 ELSE
962 result( 15 ) = zero
963 END IF
964
965
966
967 CALL zlacpy(
'Full', m, nrhs, copyb, ldb, work,
968 $ ldwork )
969 CALL zqrt16(
'No transpose', m, n, nrhs, copya,
970 $ lda, b, ldb, work, ldwork, rwork,
971 $ result( 16 ) )
972
973
974
975 result( 17 ) = zero
976 IF( m.GT.crank )
977 $ result( 17 ) =
zqrt17(
'No transpose', 1, m,
978 $ n, nrhs, copya, lda, b, ldb,
979 $ copyb, ldb, c, work, lwork )
980
981
982
983 result( 18 ) = zero
984 IF( n.GT.crank )
985 $ result( 18 ) =
zqrt14(
'No transpose', m, n,
986 $ nrhs, copya, lda, b, ldb,
987 $ work, lwork )
988
989
990
991
992 DO 80 k = 7, 18
993 IF( result( k ).GE.thresh ) THEN
994 IF( nfail.EQ.0 .AND. nerrs.EQ.0 )
995 $
CALL alahd( nout, path )
996 WRITE( nout, fmt = 9998 )m, n, nrhs, nb,
997 $ itype, k, result( k )
998 nfail = nfail + 1
999 END IF
1000 80 CONTINUE
1001 nrun = nrun + 12
1002
1003 90 CONTINUE
1004 100 CONTINUE
1005 110 CONTINUE
1006 120 CONTINUE
1007 130 CONTINUE
1008 140 CONTINUE
1009
1010
1011
1012 CALL alasvm( path, nout, nfail, nrun, nerrs )
1013
1014 9999 FORMAT( ' TRANS=''', a1, ''', M=', i5, ', N=', i5, ', NRHS=', i4,
1015 $ ', NB=', i4, ', type', i2, ', test(', i2, ')=', g12.5 )
1016 9998 FORMAT( ' M=', i5, ', N=', i5, ', NRHS=', i4, ', NB=', i4,
1017 $ ', type', i2, ', test(', i2, ')=', g12.5 )
1018 9997 FORMAT( ' TRANS=''', a1,' M=', i5, ', N=', i5, ', NRHS=', i4,
1019 $ ', MB=', i4,', NB=', i4,', type', i2,
1020 $ ', test(', i2, ')=', g12.5 )
1021
1022 DEALLOCATE( work )
1023 DEALLOCATE( iwork )
1024 DEALLOCATE( rwork )
1025 RETURN
1026
1027
1028
subroutine alasvm(type, nout, nfail, nrun, nerrs)
ALASVM
subroutine xlaenv(ispec, nvalue)
XLAENV
subroutine alaerh(path, subnam, info, infoe, opts, m, n, kl, ku, n5, imat, nfail, nerrs, nout)
ALAERH
subroutine alahd(iounit, path)
ALAHD
double precision function dasum(n, dx, incx)
DASUM
subroutine daxpy(n, da, dx, incx, dy, incy)
DAXPY
subroutine zgels(trans, m, n, nrhs, a, lda, b, ldb, work, lwork, info)
ZGELS solves overdetermined or underdetermined systems for GE matrices
subroutine zgelsd(m, n, nrhs, a, lda, b, ldb, s, rcond, rank, work, lwork, rwork, iwork, info)
ZGELSD computes the minimum-norm solution to a linear least squares problem for GE matrices
subroutine zgelss(m, n, nrhs, a, lda, b, ldb, s, rcond, rank, work, lwork, rwork, info)
ZGELSS solves overdetermined or underdetermined systems for GE matrices
subroutine zgelst(trans, m, n, nrhs, a, lda, b, ldb, work, lwork, info)
ZGELST solves overdetermined or underdetermined systems for GE matrices using QR or LQ factorization ...
subroutine zgelsy(m, n, nrhs, a, lda, b, ldb, jpvt, rcond, rank, work, lwork, rwork, info)
ZGELSY solves overdetermined or underdetermined systems for GE matrices
subroutine zgemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
ZGEMM
subroutine zgetsls(trans, m, n, nrhs, a, lda, b, ldb, work, lwork, info)
ZGETSLS
subroutine zlacpy(uplo, m, n, a, lda, b, ldb)
ZLACPY copies all or part of one two-dimensional array to another.
double precision function dlamch(cmach)
DLAMCH
subroutine zlarnv(idist, iseed, n, x)
ZLARNV returns a vector of random numbers from a uniform or normal distribution.
subroutine zdscal(n, da, zx, incx)
ZDSCAL
subroutine zscal(n, za, zx, incx)
ZSCAL
subroutine zerrls(path, nunit)
ZERRLS
double precision function zqrt12(m, n, a, lda, s, work, lwork, rwork)
ZQRT12
subroutine zqrt13(scale, m, n, a, lda, norma, iseed)
ZQRT13
double precision function zqrt14(trans, m, n, nrhs, a, lda, x, ldx, work, lwork)
ZQRT14
subroutine zqrt15(scale, rksel, m, n, nrhs, a, lda, b, ldb, s, rank, norma, normb, iseed, work, lwork)
ZQRT15
subroutine zqrt16(trans, m, n, nrhs, a, lda, x, ldx, b, ldb, rwork, resid)
ZQRT16
double precision function zqrt17(trans, iresid, m, n, nrhs, a, lda, x, ldx, b, ldb, c, work, lwork)
ZQRT17