ScaLAPACK 2.1  2.1
ScaLAPACK: Scalable Linear Algebra PACKage
pdlabad.f
Go to the documentation of this file.
1  SUBROUTINE pdlabad( ICTXT, SMALL, LARGE )
2 *
3 * -- ScaLAPACK auxiliary routine (version 1.7) --
4 * University of Tennessee, Knoxville, Oak Ridge National Laboratory,
5 * and University of California, Berkeley.
6 * May 1, 1997
7 *
8 * .. Scalar Arguments ..
9  INTEGER ICTXT
10  DOUBLE PRECISION LARGE, SMALL
11 * ..
12 *
13 * Purpose
14 * =======
15 *
16 * PDLABAD takes as input the values computed by PDLAMCH for underflow
17 * and overflow, and returns the square root of each of these values if
18 * the log of LARGE is sufficiently large. This subroutine is intended
19 * to identify machines with a large exponent range, such as the Crays,
20 * and redefine the underflow and overflow limits to be the square roots
21 * of the values computed by PDLAMCH. This subroutine is needed because
22 * PDLAMCH does not compensate for poor arithmetic in the upper half of
23 * the exponent range, as is found on a Cray.
24 *
25 * In addition, this routine performs a global minimization and maximi-
26 * zation on these values, to support heterogeneous computing networks.
27 *
28 * Arguments
29 * =========
30 *
31 * ICTXT (global input) INTEGER
32 * The BLACS context handle in which the computation takes
33 * place.
34 *
35 * SMALL (local input/local output) DOUBLE PRECISION
36 * On entry, the underflow threshold as computed by PDLAMCH.
37 * On exit, if LOG10(LARGE) is sufficiently large, the square
38 * root of SMALL, otherwise unchanged.
39 *
40 * LARGE (local input/local output) DOUBLE PRECISION
41 * On entry, the overflow threshold as computed by PDLAMCH.
42 * On exit, if LOG10(LARGE) is sufficiently large, the square
43 * root of LARGE, otherwise unchanged.
44 *
45 * =====================================================================
46 *
47 * .. Local Scalars ..
48  INTEGER IDUMM
49 * ..
50 * .. External Subroutines ..
51  EXTERNAL dgamn2d, dgamx2d
52 * ..
53 * .. Intrinsic Functions ..
54  INTRINSIC log10, sqrt
55 * ..
56 * .. Executable Statements ..
57 *
58 * If it looks like we're on a Cray, take the square root of
59 * SMALL and LARGE to avoid overflow and underflow problems.
60 *
61  IF( log10( large ).GT.2000.d0 ) THEN
62  small = sqrt( small )
63  large = sqrt( large )
64  END IF
65  idumm = 0
66 *
67  CALL dgamx2d( ictxt, 'All', ' ', 1, 1, small, 1, idumm,
68  $ idumm, -1, -1, idumm )
69  CALL dgamn2d( ictxt, 'All', ' ', 1, 1, large, 1, idumm,
70  $ idumm, -1, -1, idumm )
71 *
72  RETURN
73 *
74 * End of PDLABAD
75 *
76  END
pdlabad
subroutine pdlabad(ICTXT, SMALL, LARGE)
Definition: pdlabad.f:2