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

◆ pdlaecv()

subroutine pdlaecv ( integer  ijob,
integer  kf,
integer  kl,
double precision, dimension( * )  intvl,
integer, dimension( * )  intvlct,
integer, dimension( * )  nval,
double precision  abstol,
double precision  reltol 
)

Definition at line 1215 of file pdstebz.f.

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