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