9739
9740
9741
9742
9743
9744
9745
9746 CHARACTER*1 UPLO, AFORM
9747 INTEGER IMBLOC, INBLOC, LCMT00, LDA, LMBLOC, LNBLOC,
9748 $ MB, MBLKS, NB, NBLKS
9749
9750
9751 INTEGER IMULADD( 4, * ), IRAN( * ), JMP( * )
9752 REAL A( LDA, * )
9753
9754
9755
9756
9757
9758
9759
9760
9761
9762
9763
9764
9765
9766
9767
9768
9769
9770
9771
9772
9773
9774
9775
9776
9777
9778
9779
9780
9781
9782
9783
9784
9785
9786
9787
9788
9789
9790
9791
9792
9793
9794
9795
9796
9797
9798
9799
9800
9801
9802
9803
9804
9805
9806
9807
9808
9809
9810
9811
9812
9813
9814
9815
9816
9817
9818
9819
9820
9821
9822
9823
9824
9825
9826
9827
9828
9829
9830
9831
9832
9833
9834
9835
9836
9837
9838
9839
9840
9841
9842
9843
9844
9845
9846
9847
9848
9849
9850
9851
9852
9853
9854
9855 INTEGER JMP_1, JMP_COL, JMP_IMBV, JMP_INBV, JMP_LEN,
9856 $ JMP_MB, JMP_NB, JMP_NPIMBLOC, JMP_NPMB,
9857 $ JMP_NQINBLOC, JMP_NQNB, JMP_ROW
9858 parameter( jmp_1 = 1, jmp_row = 2, jmp_col = 3,
9859 $ jmp_mb = 4, jmp_imbv = 5, jmp_npmb = 6,
9860 $ jmp_npimbloc = 7, jmp_nb = 8, jmp_inbv = 9,
9861 $ jmp_nqnb = 10, jmp_nqinbloc = 11,
9862 $ jmp_len = 11 )
9863
9864
9865 INTEGER I, IB, IBLK, II, IK, ITMP, JB, JBLK, JJ, JK,
9866 $ JTMP, LCMTC, LCMTR, LOW, MNB, UPP
9867 REAL DUMMY
9868
9869
9870 INTEGER IB0( 2 ), IB1( 2 ), IB2( 2 ), IB3( 2 )
9871
9872
9874
9875
9876 LOGICAL LSAME
9877 REAL PB_SRAND
9879
9880
9882
9883
9884
9885 DO 10 i = 1, 2
9886 ib1( i ) = iran( i )
9887 ib2( i ) = iran( i )
9888 ib3( i ) = iran( i )
9889 10 CONTINUE
9890
9891 IF(
lsame( aform,
'N' ) )
THEN
9892
9893
9894
9895 jj = 1
9896
9897 DO 50 jblk = 1, nblks
9898
9899 IF( jblk.EQ.1 ) THEN
9900 jb = inbloc
9901 ELSE IF( jblk.EQ.nblks ) THEN
9902 jb = lnbloc
9903 ELSE
9904 jb = nb
9905 END IF
9906
9907 DO 40 jk = jj, jj + jb - 1
9908
9909 ii = 1
9910
9911 DO 30 iblk = 1, mblks
9912
9913 IF( iblk.EQ.1 ) THEN
9914 ib = imbloc
9915 ELSE IF( iblk.EQ.mblks ) THEN
9916 ib = lmbloc
9917 ELSE
9918 ib = mb
9919 END IF
9920
9921
9922
9923 DO 20 ik = ii, ii + ib - 1
9925 20 CONTINUE
9926
9927 ii = ii + ib
9928
9929 IF( iblk.EQ.1 ) THEN
9930
9931
9932
9933 CALL pb_jumpit( imuladd( 1, jmp_npimbloc ), ib1,
9934 $ ib0 )
9935
9936 ELSE
9937
9938
9939
9940 CALL pb_jumpit( imuladd( 1, jmp_npmb ), ib1, ib0 )
9941
9942 END IF
9943
9944 ib1( 1 ) = ib0( 1 )
9945 ib1( 2 ) = ib0( 2 )
9946
9947 30 CONTINUE
9948
9949
9950
9951 CALL pb_jumpit( imuladd( 1, jmp_col ), ib2, ib0 )
9952
9953 ib1( 1 ) = ib0( 1 )
9954 ib1( 2 ) = ib0( 2 )
9955 ib2( 1 ) = ib0( 1 )
9956 ib2( 2 ) = ib0( 2 )
9957
9958 40 CONTINUE
9959
9960 jj = jj + jb
9961
9962 IF( jblk.EQ.1 ) THEN
9963
9964
9965
9966 CALL pb_jumpit( imuladd( 1, jmp_nqinbloc ), ib3, ib0 )
9967
9968 ELSE
9969
9970
9971
9972 CALL pb_jumpit( imuladd( 1, jmp_nqnb ), ib3, ib0 )
9973
9974 END IF
9975
9976 ib1( 1 ) = ib0( 1 )
9977 ib1( 2 ) = ib0( 2 )
9978 ib2( 1 ) = ib0( 1 )
9979 ib2( 2 ) = ib0( 2 )
9980 ib3( 1 ) = ib0( 1 )
9981 ib3( 2 ) = ib0( 2 )
9982
9983 50 CONTINUE
9984
9985 ELSE IF(
lsame( aform,
'T' ) .OR.
lsame( aform,
'C' ) )
THEN
9986
9987
9988
9989
9990 ii = 1
9991
9992 DO 90 iblk = 1, mblks
9993
9994 IF( iblk.EQ.1 ) THEN
9995 ib = imbloc
9996 ELSE IF( iblk.EQ.mblks ) THEN
9997 ib = lmbloc
9998 ELSE
9999 ib = mb
10000 END IF
10001
10002 DO 80 ik = ii, ii + ib - 1
10003
10004 jj = 1
10005
10006 DO 70 jblk = 1, nblks
10007
10008 IF( jblk.EQ.1 ) THEN
10009 jb = inbloc
10010 ELSE IF( jblk.EQ.nblks ) THEN
10011 jb = lnbloc
10012 ELSE
10013 jb = nb
10014 END IF
10015
10016
10017
10018 DO 60 jk = jj, jj + jb - 1
10020 60 CONTINUE
10021
10022 jj = jj + jb
10023
10024 IF( jblk.EQ.1 ) THEN
10025
10026
10027
10028 CALL pb_jumpit( imuladd( 1, jmp_nqinbloc ), ib1,
10029 $ ib0 )
10030
10031 ELSE
10032
10033
10034
10035 CALL pb_jumpit( imuladd( 1, jmp_nqnb ), ib1, ib0 )
10036
10037 END IF
10038
10039 ib1( 1 ) = ib0( 1 )
10040 ib1( 2 ) = ib0( 2 )
10041
10042 70 CONTINUE
10043
10044
10045
10046 CALL pb_jumpit( imuladd( 1, jmp_row ), ib2, ib0 )
10047
10048 ib1( 1 ) = ib0( 1 )
10049 ib1( 2 ) = ib0( 2 )
10050 ib2( 1 ) = ib0( 1 )
10051 ib2( 2 ) = ib0( 2 )
10052
10053 80 CONTINUE
10054
10055 ii = ii + ib
10056
10057 IF( iblk.EQ.1 ) THEN
10058
10059
10060
10061 CALL pb_jumpit( imuladd( 1, jmp_npimbloc ), ib3, ib0 )
10062
10063 ELSE
10064
10065
10066
10067 CALL pb_jumpit( imuladd( 1, jmp_npmb ), ib3, ib0 )
10068
10069 END IF
10070
10071 ib1( 1 ) = ib0( 1 )
10072 ib1( 2 ) = ib0( 2 )
10073 ib2( 1 ) = ib0( 1 )
10074 ib2( 2 ) = ib0( 2 )
10075 ib3( 1 ) = ib0( 1 )
10076 ib3( 2 ) = ib0( 2 )
10077
10078 90 CONTINUE
10079
10080 ELSE IF( (
lsame( aform,
'S' ) ).OR.(
lsame( aform,
'H' ) ) )
THEN
10081
10082
10083
10084 IF(
lsame( uplo,
'L' ) )
THEN
10085
10086
10087
10088 jj = 1
10089 lcmtc = lcmt00
10090
10091 DO 170 jblk = 1, nblks
10092
10093 IF( jblk.EQ.1 ) THEN
10094 jb = inbloc
10095 low = 1 - inbloc
10096 ELSE IF( jblk.EQ.nblks ) THEN
10097 jb = lnbloc
10098 low = 1 - nb
10099 ELSE
10100 jb = nb
10101 low = 1 - nb
10102 END IF
10103
10104 DO 160 jk = jj, jj + jb - 1
10105
10106 ii = 1
10107 lcmtr = lcmtc
10108
10109 DO 150 iblk = 1, mblks
10110
10111 IF( iblk.EQ.1 ) THEN
10112 ib = imbloc
10113 upp = imbloc - 1
10114 ELSE IF( iblk.EQ.mblks ) THEN
10115 ib = lmbloc
10116 upp = mb - 1
10117 ELSE
10118 ib = mb
10119 upp = mb - 1
10120 END IF
10121
10122
10123
10124 IF( lcmtr.GT.upp ) THEN
10125
10126 DO 100 ik = ii, ii + ib - 1
10128 100 CONTINUE
10129
10130 ELSE IF( lcmtr.GE.low ) THEN
10131
10132 jtmp = jk - jj + 1
10133 mnb =
max( 0, -lcmtr )
10134
10135 IF( jtmp.LE.
min( mnb, jb ) )
THEN
10136
10137 DO 110 ik = ii, ii + ib - 1
10139 110 CONTINUE
10140
10141 ELSE IF( ( jtmp.GE.( mnb + 1 ) ) .AND.
10142 $ ( jtmp.LE.
min( ib-lcmtr, jb ) ) )
THEN
10143
10144 itmp = ii + jtmp + lcmtr - 1
10145
10146 DO 120 ik = ii, itmp - 1
10148 120 CONTINUE
10149
10150 DO 130 ik = itmp, ii + ib - 1
10152 130 CONTINUE
10153
10154 END IF
10155
10156 ELSE
10157
10158 DO 140 ik = ii, ii + ib - 1
10160 140 CONTINUE
10161
10162 END IF
10163
10164 ii = ii + ib
10165
10166 IF( iblk.EQ.1 ) THEN
10167
10168
10169
10170 lcmtr = lcmtr - jmp( jmp_npimbloc )
10171 CALL pb_jumpit( imuladd( 1, jmp_npimbloc ), ib1,
10172 $ ib0 )
10173
10174 ELSE
10175
10176
10177
10178 lcmtr = lcmtr - jmp( jmp_npmb )
10179 CALL pb_jumpit( imuladd( 1, jmp_npmb ), ib1,
10180 $ ib0 )
10181
10182 END IF
10183
10184 ib1( 1 ) = ib0( 1 )
10185 ib1( 2 ) = ib0( 2 )
10186
10187 150 CONTINUE
10188
10189
10190
10191 CALL pb_jumpit( imuladd( 1, jmp_col ), ib2, ib0 )
10192
10193 ib1( 1 ) = ib0( 1 )
10194 ib1( 2 ) = ib0( 2 )
10195 ib2( 1 ) = ib0( 1 )
10196 ib2( 2 ) = ib0( 2 )
10197
10198 160 CONTINUE
10199
10200 jj = jj + jb
10201
10202 IF( jblk.EQ.1 ) THEN
10203
10204
10205
10206 lcmtc = lcmtc + jmp( jmp_nqinbloc )
10207 CALL pb_jumpit( imuladd( 1, jmp_nqinbloc ), ib3, ib0 )
10208
10209 ELSE
10210
10211
10212
10213 lcmtc = lcmtc + jmp( jmp_nqnb )
10214 CALL pb_jumpit( imuladd( 1, jmp_nqnb ), ib3, ib0 )
10215
10216 END IF
10217
10218 ib1( 1 ) = ib0( 1 )
10219 ib1( 2 ) = ib0( 2 )
10220 ib2( 1 ) = ib0( 1 )
10221 ib2( 2 ) = ib0( 2 )
10222 ib3( 1 ) = ib0( 1 )
10223 ib3( 2 ) = ib0( 2 )
10224
10225 170 CONTINUE
10226
10227 ELSE
10228
10229
10230
10231 ii = 1
10232 lcmtr = lcmt00
10233
10234 DO 250 iblk = 1, mblks
10235
10236 IF( iblk.EQ.1 ) THEN
10237 ib = imbloc
10238 upp = imbloc - 1
10239 ELSE IF( iblk.EQ.mblks ) THEN
10240 ib = lmbloc
10241 upp = mb - 1
10242 ELSE
10243 ib = mb
10244 upp = mb - 1
10245 END IF
10246
10247 DO 240 ik = ii, ii + ib - 1
10248
10249 jj = 1
10250 lcmtc = lcmtr
10251
10252 DO 230 jblk = 1, nblks
10253
10254 IF( jblk.EQ.1 ) THEN
10255 jb = inbloc
10256 low = 1 - inbloc
10257 ELSE IF( jblk.EQ.nblks ) THEN
10258 jb = lnbloc
10259 low = 1 - nb
10260 ELSE
10261 jb = nb
10262 low = 1 - nb
10263 END IF
10264
10265
10266
10267 IF( lcmtc.LT.low ) THEN
10268
10269 DO 180 jk = jj, jj + jb - 1
10271 180 CONTINUE
10272
10273 ELSE IF( lcmtc.LE.upp ) THEN
10274
10275 itmp = ik - ii + 1
10276 mnb =
max( 0, lcmtc )
10277
10278 IF( itmp.LE.
min( mnb, ib ) )
THEN
10279
10280 DO 190 jk = jj, jj + jb - 1
10282 190 CONTINUE
10283
10284 ELSE IF( ( itmp.GE.( mnb + 1 ) ) .AND.
10285 $ ( itmp.LE.
min( jb+lcmtc, ib ) ) )
THEN
10286
10287 jtmp = jj + itmp - lcmtc - 1
10288
10289 DO 200 jk = jj, jtmp - 1
10291 200 CONTINUE
10292
10293 DO 210 jk = jtmp, jj + jb - 1
10295 210 CONTINUE
10296
10297 END IF
10298
10299 ELSE
10300
10301 DO 220 jk = jj, jj + jb - 1
10303 220 CONTINUE
10304
10305 END IF
10306
10307 jj = jj + jb
10308
10309 IF( jblk.EQ.1 ) THEN
10310
10311
10312
10313 lcmtc = lcmtc + jmp( jmp_nqinbloc )
10314 CALL pb_jumpit( imuladd( 1, jmp_nqinbloc ), ib1,
10315 $ ib0 )
10316
10317 ELSE
10318
10319
10320
10321 lcmtc = lcmtc + jmp( jmp_nqnb )
10322 CALL pb_jumpit( imuladd( 1, jmp_nqnb ), ib1,
10323 $ ib0 )
10324
10325 END IF
10326
10327 ib1( 1 ) = ib0( 1 )
10328 ib1( 2 ) = ib0( 2 )
10329
10330 230 CONTINUE
10331
10332
10333
10334 CALL pb_jumpit( imuladd( 1, jmp_row ), ib2, ib0 )
10335
10336 ib1( 1 ) = ib0( 1 )
10337 ib1( 2 ) = ib0( 2 )
10338 ib2( 1 ) = ib0( 1 )
10339 ib2( 2 ) = ib0( 2 )
10340
10341 240 CONTINUE
10342
10343 ii = ii + ib
10344
10345 IF( iblk.EQ.1 ) THEN
10346
10347
10348
10349 lcmtr = lcmtr - jmp( jmp_npimbloc )
10350 CALL pb_jumpit( imuladd( 1, jmp_npimbloc ), ib3, ib0 )
10351
10352 ELSE
10353
10354
10355
10356 lcmtr = lcmtr - jmp( jmp_npmb )
10357 CALL pb_jumpit( imuladd( 1, jmp_npmb ), ib3, ib0 )
10358
10359 END IF
10360
10361 ib1( 1 ) = ib0( 1 )
10362 ib1( 2 ) = ib0( 2 )
10363 ib2( 1 ) = ib0( 1 )
10364 ib2( 2 ) = ib0( 2 )
10365 ib3( 1 ) = ib0( 1 )
10366 ib3( 2 ) = ib0( 2 )
10367
10368 250 CONTINUE
10369
10370 END IF
10371
10372 END IF
10373
10374 RETURN
10375
10376
10377
subroutine pb_jumpit(muladd, irann, iranm)
real function pb_srand(idumm)