SCALAPACK 2.2.2
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches

◆ pslaecv()

subroutine pslaecv ( integer  ijob,
integer  kf,
integer  kl,
real, dimension( * )  intvl,
integer, dimension( * )  intvlct,
integer, dimension( * )  nval,
real  abstol,
real  reltol 
)

Definition at line 1199 of file psstebz.f.

1201*
1202* -- ScaLAPACK routine (version 1.7) --
1203* University of Tennessee, Knoxville, Oak Ridge National Laboratory,
1204* and University of California, Berkeley.
1205* November 15, 1997
1206*
1207*
1208* .. Scalar Arguments ..
1209 INTEGER IJOB, KF, KL
1210 REAL ABSTOL, RELTOL
1211* ..
1212* .. Array Arguments ..
1213 INTEGER INTVLCT( * ), NVAL( * )
1214 REAL INTVL( * )
1215* ..
1216*
1217* Purpose
1218* =======
1219*
1220* PSLAECV checks if the input intervals [ INTVL(2*i-1), INTVL(2*i) ],
1221* i = KF, ... , KL-1, have "converged".
1222* PSLAECV modifies KF to be the index of the last converged interval,
1223* i.e., on output, all intervals [ INTVL(2*i-1), INTVL(2*i) ], i < KF,
1224* have converged. Note that the input intervals may be reordered by
1225* PSLAECV.
1226*
1227* This is a SCALAPACK internal procedure and arguments are not checked
1228* for unreasonable values.
1229*
1230* Arguments
1231* =========
1232*
1233* IJOB (input) INTEGER
1234* Specifies the criterion for "convergence" of an interval.
1235* = 0 : When an interval is narrower than ABSTOL, or than
1236* RELTOL times the larger (in magnitude) endpoint, then
1237* it is considered to have "converged".
1238* = 1 : When an interval is narrower than ABSTOL, or than
1239* RELTOL times the larger (in magnitude) endpoint, or if
1240* the counts at the endpoints are identical to the counts
1241* specified by NVAL ( see NVAL ) then the interval is
1242* considered to have "converged".
1243*
1244* KF (input/output) INTEGER
1245* On input, the index of the first input interval is 2*KF-1.
1246* On output, the index of the last converged interval
1247* is 2*KF-3.
1248*
1249* KL (input) INTEGER
1250* The index of the last input interval is 2*KL-3.
1251*
1252* INTVL (input/output) REAL array, dimension (2*(KL-KF))
1253* The endpoints of the intervals. INTVL(2*j-1) is the left
1254* oendpoint f the j-th interval, and INTVL(2*j) is the right
1255* endpoint of the j-th interval. The input intervals will,
1256* in general, be reordered on output.
1257* On input, INTVL contains the KL-KF input intervals.
1258* On output, INTVL contains the converged intervals, 1 thru'
1259* KF-1, and the unconverged intervals, KF thru' KL-1.
1260*
1261* INTVLCT (input/output) INTEGER array, dimension (2*(KL-KF))
1262* The counts at the endpoints of the intervals. INTVLCT(2*j-1)
1263* is the count at the left endpoint of the j-th interval, i.e.,
1264* the function value N(INTVL(2*j-1)), and INTVLCT(2*j) is the
1265* count at the right endpoint of the j-th interval. This array
1266* will, in general, be reordered on output.
1267* See the comments in PSLAEBZ for more on the function N(w).
1268*
1269* NVAL (input/output) INTEGER array, dimension (2*(KL-KF))
1270* The desired counts, N(w), at the endpoints of the
1271* corresponding intervals. This array will, in general,
1272* be reordered on output.
1273*
1274* ABSTOL (input) REAL
1275* The minimum (absolute) width of an interval. When an interval
1276* is narrower than ABSTOL, or than RELTOL times the larger (in
1277* magnitude) endpoint, then it is considered to be sufficiently
1278* small, i.e., converged.
1279* Note : This must be at least zero.
1280*
1281* RELTOL (input) REAL
1282* The minimum relative width of an interval. When an interval
1283* is narrower than ABSTOL, or than RELTOL times the larger (in
1284* magnitude) endpoint, then it is considered to be sufficiently
1285* small, i.e., converged.
1286* Note : This should be at least radix*machine epsilon.
1287*
1288* =====================================================================
1289*
1290* .. Intrinsic Functions ..
1291 INTRINSIC abs, max
1292* ..
1293* .. Local Scalars ..
1294 LOGICAL CONDN
1295 INTEGER I, ITMP1, ITMP2, J, K, KFNEW
1296 REAL TMP1, TMP2, TMP3, TMP4
1297* ..
1298* .. Executable Statements ..
1299*
1300 kfnew = kf
1301 DO 10 i = kf, kl - 1
1302 k = 2*i
1303 tmp3 = intvl( k-1 )
1304 tmp4 = intvl( k )
1305 tmp1 = abs( tmp4-tmp3 )
1306 tmp2 = max( abs( tmp3 ), abs( tmp4 ) )
1307 condn = tmp1.LT.max( abstol, reltol*tmp2 )
1308 IF( ijob.EQ.0 )
1309 $ condn = condn .OR. ( ( intvlct( k-1 ).EQ.nval( k-1 ) ) .AND.
1310 $ intvlct( k ).EQ.nval( k ) )
1311 IF( condn ) THEN
1312 IF( i.GT.kfnew ) THEN
1313*
1314* Reorder Intervals
1315*
1316 j = 2*kfnew
1317 tmp1 = intvl( k-1 )
1318 tmp2 = intvl( k )
1319 itmp1 = intvlct( k-1 )
1320 itmp2 = intvlct( k )
1321 intvl( k-1 ) = intvl( j-1 )
1322 intvl( k ) = intvl( j )
1323 intvlct( k-1 ) = intvlct( j-1 )
1324 intvlct( k ) = intvlct( j )
1325 intvl( j-1 ) = tmp1
1326 intvl( j ) = tmp2
1327 intvlct( j-1 ) = itmp1
1328 intvlct( j ) = itmp2
1329 IF( ijob.EQ.0 ) THEN
1330 itmp1 = nval( k-1 )
1331 nval( k-1 ) = nval( j-1 )
1332 nval( j-1 ) = itmp1
1333 itmp1 = nval( k )
1334 nval( k ) = nval( j )
1335 nval( j ) = itmp1
1336 END IF
1337 END IF
1338 kfnew = kfnew + 1
1339 END IF
1340 10 CONTINUE
1341 kf = kfnew
1342 RETURN
1343*
1344* End of PSLAECV
1345*
#define max(A, B)
Definition pcgemr.c:180
Here is the caller graph for this function: