3
4
5
6
7
8
9 CHARACTER DIST, PACK, SYM
10 INTEGER INFO, KL, KU, LDA, M, MODE, N
11 REAL COND, DMAX
12
13
14 INTEGER ISEED( 4 )
15 REAL A( LDA, * ), D( * ), WORK( * )
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253 REAL ZERO
254 parameter( zero = 0.0e0 )
255 REAL ONE
256 parameter( one = 1.0e0 )
257 REAL TWOPI
258 parameter( twopi = 6.2831853071795864769252867663e+0 )
259
260
261 LOGICAL GIVENS, ILEXTR, ILTEMP, TOPDWN
262 INTEGER I, IC, ICOL, IDIST, IENDCH, IINFO, IL, ILDA,
263 $ IOFFG, IOFFST, IPACK, IPACKG, IR, IR1, IR2,
264 $ IROW, IRSIGN, ISKEW, ISYM, ISYMPK, J, JC, JCH,
265 $ JKL, JKU, JR, K, LLB, MINLDA, MNMIN, MR, NC,
266 $ UUB
267 REAL ALPHA, ANGLE, C, DUMMY, EXTRA, S, TEMP
268
269
270 LOGICAL LSAME
271 REAL SLARND
273
274
276 $ slaset, sscal, xerbla
277
278
279 INTRINSIC abs, cos,
max,
min, mod, real, sin
280
281
282
283
284
285
286 info = 0
287
288
289
290 IF( m.EQ.0 .OR. n.EQ.0 )
291 $ RETURN
292
293
294
295 IF(
lsame( dist,
'U' ) )
THEN
296 idist = 1
297 ELSE IF(
lsame( dist,
'S' ) )
THEN
298 idist = 2
299 ELSE IF(
lsame( dist,
'N' ) )
THEN
300 idist = 3
301 ELSE
302 idist = -1
303 END IF
304
305
306
307 IF(
lsame( sym,
'N' ) )
THEN
308 isym = 1
309 irsign = 0
310 ELSE IF(
lsame( sym,
'P' ) )
THEN
311 isym = 2
312 irsign = 0
313 ELSE IF(
lsame( sym,
'S' ) )
THEN
314 isym = 2
315 irsign = 1
316 ELSE IF(
lsame( sym,
'H' ) )
THEN
317 isym = 2
318 irsign = 1
319 ELSE
320 isym = -1
321 END IF
322
323
324
325 isympk = 0
326 IF(
lsame( pack,
'N' ) )
THEN
327 ipack = 0
328 ELSE IF(
lsame( pack,
'U' ) )
THEN
329 ipack = 1
330 isympk = 1
331 ELSE IF(
lsame( pack,
'L' ) )
THEN
332 ipack = 2
333 isympk = 1
334 ELSE IF(
lsame( pack,
'C' ) )
THEN
335 ipack = 3
336 isympk = 2
337 ELSE IF(
lsame( pack,
'R' ) )
THEN
338 ipack = 4
339 isympk = 3
340 ELSE IF(
lsame( pack,
'B' ) )
THEN
341 ipack = 5
342 isympk = 3
343 ELSE IF(
lsame( pack,
'Q' ) )
THEN
344 ipack = 6
345 isympk = 2
346 ELSE IF(
lsame( pack,
'Z' ) )
THEN
347 ipack = 7
348 ELSE
349 ipack = -1
350 END IF
351
352
353
359 irow = 1
360 icol = 1
361
362 IF( ipack.EQ.5 .OR. ipack.EQ.6 ) THEN
363 minlda = uub + 1
364 ELSE IF( ipack.EQ.7 ) THEN
365 minlda = llb + uub + 1
366 ELSE
367 minlda = m
368 END IF
369
370
371
372
373 givens = .false.
374 IF( isym.EQ.1 ) THEN
375 IF( real( llb+uub ).LT.0.3*real(
max( 1, mr+nc ) ) )
376 $ givens = .true.
377 ELSE
378 IF( 2*llb.LT.m )
379 $ givens = .true.
380 END IF
381 IF( lda.LT.m .AND. lda.GE.minlda )
382 $ givens = .true.
383
384
385
386 IF( m.LT.0 ) THEN
387 info = -1
388 ELSE IF( m.NE.n .AND. isym.NE.1 ) THEN
389 info = -1
390 ELSE IF( n.LT.0 ) THEN
391 info = -2
392 ELSE IF( idist.EQ.-1 ) THEN
393 info = -3
394 ELSE IF( isym.EQ.-1 ) THEN
395 info = -5
396 ELSE IF( abs( mode ).GT.6 ) THEN
397 info = -7
398 ELSE IF( ( mode.NE.0 .AND. abs( mode ).NE.6 ) .AND. cond.LT.one )
399 $ THEN
400 info = -8
401 ELSE IF( kl.LT.0 ) THEN
402 info = -10
403 ELSE IF( ku.LT.0 .OR. ( isym.NE.1 .AND. kl.NE.ku ) ) THEN
404 info = -11
405 ELSE IF( ipack.EQ.-1 .OR. ( isympk.EQ.1 .AND. isym.EQ.1 ) .OR.
406 $ ( isympk.EQ.2 .AND. isym.EQ.1 .AND. kl.GT.0 ) .OR.
407 $ ( isympk.EQ.3 .AND. isym.EQ.1 .AND. ku.GT.0 ) .OR.
408 $ ( isympk.NE.0 .AND. m.NE.n ) ) THEN
409 info = -12
410 ELSE IF( lda.LT.
max( 1, minlda ) )
THEN
411 info = -14
412 END IF
413
414 IF( info.NE.0 ) THEN
415 CALL xerbla( 'SLATMS', -info )
416 RETURN
417 END IF
418
419
420
421 DO 10 i = 1, 4
422 iseed( i ) = mod( abs( iseed( i ) ), 4096 )
423 10 CONTINUE
424
425 IF( mod( iseed( 4 ), 2 ).NE.1 )
426 $ iseed( 4 ) = iseed( 4 ) + 1
427
428
429
430
431
432 CALL slatm1( mode, cond, irsign, idist, iseed, d, mnmin, iinfo )
433 IF( iinfo.NE.0 ) THEN
434 info = 1
435 RETURN
436 END IF
437
438
439
440
441 IF( abs( d( 1 ) ).LE.abs( d( mnmin ) ) ) THEN
442 topdwn = .true.
443 ELSE
444 topdwn = .false.
445 END IF
446
447 IF( mode.NE.0 .AND. abs( mode ).NE.6 ) THEN
448
449
450
451 temp = abs( d( 1 ) )
452 DO 20 i = 2, mnmin
453 temp =
max( temp, abs( d( i ) ) )
454 20 CONTINUE
455
456 IF( temp.GT.zero ) THEN
457 alpha = dmax / temp
458 ELSE
459 info = 2
460 RETURN
461 END IF
462
463 CALL sscal( mnmin, alpha, d, 1 )
464
465 END IF
466
467
468
469
470
471
472
473
474
475
476 IF( ipack.GT.4 ) THEN
477 ilda = lda - 1
478 iskew = 1
479 IF( ipack.GT.5 ) THEN
480 ioffst = uub + 1
481 ELSE
482 ioffst = 1
483 END IF
484 ELSE
485 ilda = lda
486 iskew = 0
487 ioffst = 0
488 END IF
489
490
491
492
493
494 ipackg = 0
495 CALL slaset( 'Full', lda, n, zero, zero, a, lda )
496
497
498
499
500 IF( llb.EQ.0 .AND. uub.EQ.0 ) THEN
501 CALL scopy( mnmin, d, 1, a( 1-iskew+ioffst, 1 ), ilda+1 )
502 IF( ipack.LE.2 .OR. ipack.GE.5 )
503 $ ipackg = ipack
504
505 ELSE IF( givens ) THEN
506
507
508
509
510 IF( isym.EQ.1 ) THEN
511
512
513
514 IF( ipack.GT.4 ) THEN
515 ipackg = ipack
516 ELSE
517 ipackg = 0
518 END IF
519
520 CALL scopy( mnmin, d, 1, a( 1-iskew+ioffst, 1 ), ilda+1 )
521
522 IF( topdwn ) THEN
523 jkl = 0
524 DO 50 jku = 1, uub
525
526
527
528
529
530
531 DO 40 jr = 1,
min( m+jku, n ) + jkl - 1
532 extra = zero
533 angle = twopi*
slarnd( 1, iseed )
534 c = cos( angle )
535 s = sin( angle )
536 icol =
max( 1, jr-jkl )
537 IF( jr.LT.m ) THEN
538 il =
min( n, jr+jku ) + 1 - icol
539 CALL slarot( .true., jr.GT.jkl, .false., il, c,
540 $ s, a( jr-iskew*icol+ioffst, icol ),
541 $ ilda, extra, dummy )
542 END IF
543
544
545
546 ir = jr
547 ic = icol
548 DO 30 jch = jr - jkl, 1, -jkl - jku
549 IF( ir.LT.m ) THEN
550 CALL slartg( a( ir+1-iskew*( ic+1 )+ioffst,
551 $ ic+1 ), extra, c, s, dummy )
552 END IF
553 irow =
max( 1, jch-jku )
554 il = ir + 2 - irow
555 temp = zero
556 iltemp = jch.GT.jku
557 CALL slarot( .false., iltemp, .true., il, c, -s,
558 $ a( irow-iskew*ic+ioffst, ic ),
559 $ ilda, temp, extra )
560 IF( iltemp ) THEN
561 CALL slartg( a( irow+1-iskew*( ic+1 )+ioffst,
562 $ ic+1 ), temp, c, s, dummy )
563 icol =
max( 1, jch-jku-jkl )
564 il = ic + 2 - icol
565 extra = zero
566 CALL slarot( .true., jch.GT.jku+jkl, .true.,
567 $ il, c, -s, a( irow-iskew*icol+
568 $ ioffst, icol ), ilda, extra,
569 $ temp )
570 ic = icol
571 ir = irow
572 END IF
573 30 CONTINUE
574 40 CONTINUE
575 50 CONTINUE
576
577 jku = uub
578 DO 80 jkl = 1, llb
579
580
581
582 DO 70 jc = 1,
min( n+jkl, m ) + jku - 1
583 extra = zero
584 angle = twopi*
slarnd( 1, iseed )
585 c = cos( angle )
586 s = sin( angle )
587 irow =
max( 1, jc-jku )
588 IF( jc.LT.n ) THEN
589 il =
min( m, jc+jkl ) + 1 - irow
590 CALL slarot( .false., jc.GT.jku, .false., il, c,
591 $ s, a( irow-iskew*jc+ioffst, jc ),
592 $ ilda, extra, dummy )
593 END IF
594
595
596
597 ic = jc
598 ir = irow
599 DO 60 jch = jc - jku, 1, -jkl - jku
600 IF( ic.LT.n ) THEN
601 CALL slartg( a( ir+1-iskew*( ic+1 )+ioffst,
602 $ ic+1 ), extra, c, s, dummy )
603 END IF
604 icol =
max( 1, jch-jkl )
605 il = ic + 2 - icol
606 temp = zero
607 iltemp = jch.GT.jkl
608 CALL slarot( .true., iltemp, .true., il, c, -s,
609 $ a( ir-iskew*icol+ioffst, icol ),
610 $ ilda, temp, extra )
611 IF( iltemp ) THEN
612 CALL slartg( a( ir+1-iskew*( icol+1 )+ioffst,
613 $ icol+1 ), temp, c, s, dummy )
614 irow =
max( 1, jch-jkl-jku )
615 il = ir + 2 - irow
616 extra = zero
617 CALL slarot( .false., jch.GT.jkl+jku, .true.,
618 $ il, c, -s, a( irow-iskew*icol+
619 $ ioffst, icol ), ilda, extra,
620 $ temp )
621 ic = icol
622 ir = irow
623 END IF
624 60 CONTINUE
625 70 CONTINUE
626 80 CONTINUE
627
628 ELSE
629
630
631
632 jkl = 0
633 DO 110 jku = 1, uub
634
635
636
637
638
639
640 iendch =
min( m, n+jkl ) - 1
641 DO 100 jc =
min( m+jku, n ) - 1, 1 - jkl, -1
642 extra = zero
643 angle = twopi*
slarnd( 1, iseed )
644 c = cos( angle )
645 s = sin( angle )
646 irow =
max( 1, jc-jku+1 )
647 IF( jc.GT.0 ) THEN
648 il =
min( m, jc+jkl+1 ) + 1 - irow
649 CALL slarot( .false., .false., jc+jkl.LT.m, il,
650 $ c, s, a( irow-iskew*jc+ioffst,
651 $ jc ), ilda, dummy, extra )
652 END IF
653
654
655
656 ic = jc
657 DO 90 jch = jc + jkl, iendch, jkl + jku
658 ilextr = ic.GT.0
659 IF( ilextr ) THEN
660 CALL slartg( a( jch-iskew*ic+ioffst, ic ),
661 $ extra, c, s, dummy )
662 END IF
664 icol =
min( n-1, jch+jku )
665 iltemp = jch + jku.LT.n
666 temp = zero
667 CALL slarot( .true., ilextr, iltemp, icol+2-ic,
668 $ c, s, a( jch-iskew*ic+ioffst, ic ),
669 $ ilda, extra, temp )
670 IF( iltemp ) THEN
671 CALL slartg( a( jch-iskew*icol+ioffst,
672 $ icol ), temp, c, s, dummy )
673 il =
min( iendch, jch+jkl+jku ) + 2 - jch
674 extra = zero
675 CALL slarot( .false., .true.,
676 $ jch+jkl+jku.LE.iendch, il, c, s,
677 $ a( jch-iskew*icol+ioffst,
678 $ icol ), ilda, temp, extra )
679 ic = icol
680 END IF
681 90 CONTINUE
682 100 CONTINUE
683 110 CONTINUE
684
685 jku = uub
686 DO 140 jkl = 1, llb
687
688
689
690
691
692
693 iendch =
min( n, m+jku ) - 1
694 DO 130 jr =
min( n+jkl, m ) - 1, 1 - jku, -1
695 extra = zero
696 angle = twopi*
slarnd( 1, iseed )
697 c = cos( angle )
698 s = sin( angle )
699 icol =
max( 1, jr-jkl+1 )
700 IF( jr.GT.0 ) THEN
701 il =
min( n, jr+jku+1 ) + 1 - icol
702 CALL slarot( .true., .false., jr+jku.LT.n, il,
703 $ c, s, a( jr-iskew*icol+ioffst,
704 $ icol ), ilda, dummy, extra )
705 END IF
706
707
708
709 ir = jr
710 DO 120 jch = jr + jku, iendch, jkl + jku
711 ilextr = ir.GT.0
712 IF( ilextr ) THEN
713 CALL slartg( a( ir-iskew*jch+ioffst, jch ),
714 $ extra, c, s, dummy )
715 END IF
717 irow =
min( m-1, jch+jkl )
718 iltemp = jch + jkl.LT.m
719 temp = zero
720 CALL slarot( .false., ilextr, iltemp, irow+2-ir,
721 $ c, s, a( ir-iskew*jch+ioffst,
722 $ jch ), ilda, extra, temp )
723 IF( iltemp ) THEN
724 CALL slartg( a( irow-iskew*jch+ioffst, jch ),
725 $ temp, c, s, dummy )
726 il =
min( iendch, jch+jkl+jku ) + 2 - jch
727 extra = zero
728 CALL slarot( .true., .true.,
729 $ jch+jkl+jku.LE.iendch, il, c, s,
730 $ a( irow-iskew*jch+ioffst, jch ),
731 $ ilda, temp, extra )
732 ir = irow
733 END IF
734 120 CONTINUE
735 130 CONTINUE
736 140 CONTINUE
737 END IF
738
739 ELSE
740
741
742
743 ipackg = ipack
744 ioffg = ioffst
745
746 IF( topdwn ) THEN
747
748
749
750 IF( ipack.GE.5 ) THEN
751 ipackg = 6
752 ioffg = uub + 1
753 ELSE
754 ipackg = 1
755 END IF
756 CALL scopy( mnmin, d, 1, a( 1-iskew+ioffg, 1 ), ilda+1 )
757
758 DO 170 k = 1, uub
759 DO 160 jc = 1, n - 1
760 irow =
max( 1, jc-k )
761 il =
min( jc+1, k+2 )
762 extra = zero
763 temp = a( jc-iskew*( jc+1 )+ioffg, jc+1 )
764 angle = twopi*
slarnd( 1, iseed )
765 c = cos( angle )
766 s = sin( angle )
767 CALL slarot( .false., jc.GT.k, .true., il, c, s,
768 $ a( irow-iskew*jc+ioffg, jc ), ilda,
769 $ extra, temp )
770 CALL slarot( .true., .true., .false.,
771 $
min( k, n-jc )+1, c, s,
772 $ a( ( 1-iskew )*jc+ioffg, jc ), ilda,
773 $ temp, dummy )
774
775
776
777 icol = jc
778 DO 150 jch = jc - k, 1, -k
779 CALL slartg( a( jch+1-iskew*( icol+1 )+ioffg,
780 $ icol+1 ), extra, c, s, dummy )
781 temp = a( jch-iskew*( jch+1 )+ioffg, jch+1 )
782 CALL slarot( .true., .true., .true., k+2, c, -s,
783 $ a( ( 1-iskew )*jch+ioffg, jch ),
784 $ ilda, temp, extra )
785 irow =
max( 1, jch-k )
786 il =
min( jch+1, k+2 )
787 extra = zero
788 CALL slarot( .false., jch.GT.k, .true., il, c,
789 $ -s, a( irow-iskew*jch+ioffg, jch ),
790 $ ilda, extra, temp )
791 icol = jch
792 150 CONTINUE
793 160 CONTINUE
794 170 CONTINUE
795
796
797
798
799 IF( ipack.NE.ipackg .AND. ipack.NE.3 ) THEN
800 DO 190 jc = 1, n
801 irow = ioffst - iskew*jc
802 DO 180 jr = jc,
min( n, jc+uub )
803 a( jr+irow, jc ) = a( jc-iskew*jr+ioffg, jr )
804 180 CONTINUE
805 190 CONTINUE
806 IF( ipack.EQ.5 ) THEN
807 DO 210 jc = n - uub + 1, n
808 DO 200 jr = n + 2 - jc, uub + 1
809 a( jr, jc ) = zero
810 200 CONTINUE
811 210 CONTINUE
812 END IF
813 IF( ipackg.EQ.6 ) THEN
814 ipackg = ipack
815 ELSE
816 ipackg = 0
817 END IF
818 END IF
819 ELSE
820
821
822
823 IF( ipack.GE.5 ) THEN
824 ipackg = 5
825 IF( ipack.EQ.6 )
826 $ ioffg = 1
827 ELSE
828 ipackg = 2
829 END IF
830 CALL scopy( mnmin, d, 1, a( 1-iskew+ioffg, 1 ), ilda+1 )
831
832 DO 240 k = 1, uub
833 DO 230 jc = n - 1, 1, -1
834 il =
min( n+1-jc, k+2 )
835 extra = zero
836 temp = a( 1+( 1-iskew )*jc+ioffg, jc )
837 angle = twopi*
slarnd( 1, iseed )
838 c = cos( angle )
839 s = -sin( angle )
840 CALL slarot( .false., .true., n-jc.GT.k, il, c, s,
841 $ a( ( 1-iskew )*jc+ioffg, jc ), ilda,
842 $ temp, extra )
843 icol =
max( 1, jc-k+1 )
844 CALL slarot( .true., .false., .true., jc+2-icol, c,
845 $ s, a( jc-iskew*icol+ioffg, icol ),
846 $ ilda, dummy, temp )
847
848
849
850 icol = jc
851 DO 220 jch = jc + k, n - 1, k
852 CALL slartg( a( jch-iskew*icol+ioffg, icol ),
853 $ extra, c, s, dummy )
854 temp = a( 1+( 1-iskew )*jch+ioffg, jch )
855 CALL slarot( .true., .true., .true., k+2, c, s,
856 $ a( jch-iskew*icol+ioffg, icol ),
857 $ ilda, extra, temp )
858 il =
min( n+1-jch, k+2 )
859 extra = zero
860 CALL slarot( .false., .true., n-jch.GT.k, il, c,
861 $ s, a( ( 1-iskew )*jch+ioffg, jch ),
862 $ ilda, temp, extra )
863 icol = jch
864 220 CONTINUE
865 230 CONTINUE
866 240 CONTINUE
867
868
869
870
871 IF( ipack.NE.ipackg .AND. ipack.NE.4 ) THEN
872 DO 260 jc = n, 1, -1
873 irow = ioffst - iskew*jc
874 DO 250 jr = jc,
max( 1, jc-uub ), -1
875 a( jr+irow, jc ) = a( jc-iskew*jr+ioffg, jr )
876 250 CONTINUE
877 260 CONTINUE
878 IF( ipack.EQ.6 ) THEN
879 DO 280 jc = 1, uub
880 DO 270 jr = 1, uub + 1 - jc
881 a( jr, jc ) = zero
882 270 CONTINUE
883 280 CONTINUE
884 END IF
885 IF( ipackg.EQ.5 ) THEN
886 ipackg = ipack
887 ELSE
888 ipackg = 0
889 END IF
890 END IF
891 END IF
892 END IF
893
894 ELSE
895
896
897
898
899
900
901
902
903 IF( isym.EQ.1 ) THEN
904
905
906
907 CALL slagge( mr, nc, llb, uub, d, a, lda, iseed, work,
908 $ iinfo )
909 ELSE
910
911
912
913 CALL slagsy( m, llb, d, a, lda, iseed, work, iinfo )
914
915 END IF
916 IF( iinfo.NE.0 ) THEN
917 info = 3
918 RETURN
919 END IF
920 END IF
921
922
923
924 IF( ipack.NE.ipackg ) THEN
925 IF( ipack.EQ.1 ) THEN
926
927
928
929 DO 300 j = 1, m
930 DO 290 i = j + 1, m
931 a( i, j ) = zero
932 290 CONTINUE
933 300 CONTINUE
934
935 ELSE IF( ipack.EQ.2 ) THEN
936
937
938
939 DO 320 j = 2, m
940 DO 310 i = 1, j - 1
941 a( i, j ) = zero
942 310 CONTINUE
943 320 CONTINUE
944
945 ELSE IF( ipack.EQ.3 ) THEN
946
947
948
949 icol = 1
950 irow = 0
951 DO 340 j = 1, m
952 DO 330 i = 1, j
953 irow = irow + 1
954 IF( irow.GT.lda ) THEN
955 irow = 1
956 icol = icol + 1
957 END IF
958 a( irow, icol ) = a( i, j )
959 330 CONTINUE
960 340 CONTINUE
961
962 ELSE IF( ipack.EQ.4 ) THEN
963
964
965
966 icol = 1
967 irow = 0
968 DO 360 j = 1, m
969 DO 350 i = j, m
970 irow = irow + 1
971 IF( irow.GT.lda ) THEN
972 irow = 1
973 icol = icol + 1
974 END IF
975 a( irow, icol ) = a( i, j )
976 350 CONTINUE
977 360 CONTINUE
978
979 ELSE IF( ipack.GE.5 ) THEN
980
981
982
983
984
985 IF( ipack.EQ.5 )
986 $ uub = 0
987 IF( ipack.EQ.6 )
988 $ llb = 0
989
990 DO 380 j = 1, uub
991 DO 370 i =
min( j+llb, m ), 1, -1
992 a( i-j+uub+1, j ) = a( i, j )
993 370 CONTINUE
994 380 CONTINUE
995
996 DO 400 j = uub + 2, n
997 DO 390 i = j - uub,
min( j+llb, m )
998 a( i-j+uub+1, j ) = a( i, j )
999 390 CONTINUE
1000 400 CONTINUE
1001 END IF
1002
1003
1004
1005
1006
1007
1008 IF( ipack.EQ.3 .OR. ipack.EQ.4 ) THEN
1009 DO 420 jc = icol, m
1010 DO 410 jr = irow + 1, lda
1011 a( jr, jc ) = zero
1012 410 CONTINUE
1013 irow = 0
1014 420 CONTINUE
1015
1016 ELSE IF( ipack.GE.5 ) THEN
1017
1018
1019
1020
1021
1022
1023
1024 ir1 = uub + llb + 2
1025 ir2 = uub + m + 2
1026 DO 450 jc = 1, n
1027 DO 430 jr = 1, uub + 1 - jc
1028 a( jr, jc ) = zero
1029 430 CONTINUE
1030 DO 440 jr =
max( 1,
min( ir1, ir2-jc ) ), lda
1031 a( jr, jc ) = zero
1032 440 CONTINUE
1033 450 CONTINUE
1034 END IF
1035 END IF
1036
1037 RETURN
1038
1039
1040
subroutine slagge(m, n, kl, ku, d, a, lda, iseed, work, info)
subroutine slagsy(n, k, d, a, lda, iseed, work, info)
real function slarnd(idist, iseed)
subroutine slarot(lrows, lleft, lright, nl, c, s, a, lda, xleft, xright)
subroutine slatm1(mode, cond, irsign, idist, iseed, d, n, info)