Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/mathlibs/src/parpack/pslamch.f
5191 views
1
REAL FUNCTION PSLAMCH10( ICTXT, CMACH )
2
*
3
include "mpif.h"
4
* -- ScaLAPACK auxilliary routine (version 1.0) --
5
* University of Tennessee, Knoxville, Oak Ridge National Laboratory,
6
* and University of California, Berkeley.
7
* February 28, 1995
8
*
9
* .. Scalar Arguments ..
10
CHARACTER CMACH
11
INTEGER ICTXT
12
* ..
13
*
14
* Purpose
15
* =======
16
*
17
* PSLAMCH determines single precision machine parameters.
18
*
19
* Arguments
20
* =========
21
*
22
* ICTXT (global input) INTEGER
23
* The BLACS context handle in which the computation takes
24
* place.
25
*
26
* CMACH (global input) CHARACTER*1
27
* Specifies the value to be returned by PSLAMCH:
28
* = 'E' or 'e', PSLAMCH := eps
29
* = 'S' or 's , PSLAMCH := sfmin
30
* = 'B' or 'b', PSLAMCH := base
31
* = 'P' or 'p', PSLAMCH := eps*base
32
* = 'N' or 'n', PSLAMCH := t
33
* = 'R' or 'r', PSLAMCH := rnd
34
* = 'M' or 'm', PSLAMCH := emin
35
* = 'U' or 'u', PSLAMCH := rmin
36
* = 'L' or 'l', PSLAMCH := emax
37
* = 'O' or 'o', PSLAMCH := rmax
38
*
39
* where
40
*
41
* eps = relative machine precision
42
* sfmin = safe minimum, such that 1/sfmin does not overflow
43
* base = base of the machine
44
* prec = eps*base
45
* t = number of (base) digits in the mantissa
46
* rnd = 1.0 when rounding occurs in addition, 0.0 otherwise
47
* emin = minimum exponent before (gradual) underflow
48
* rmin = underflow threshold - base**(emin-1)
49
* emax = largest exponent before overflow
50
* rmax = overflow threshold - (base**emax)*(1-eps)
51
*
52
* =====================================================================
53
*
54
* .. Local Scalars ..
55
INTEGER IDUMM
56
REAL TEMP, TEMP1
57
* ..
58
* .. External Subroutines ..
59
* EXTERNAL SGAMN2D, SGAMX2D
60
* ..
61
* .. External Functions ..
62
LOGICAL LSAME
63
REAL SLAMCH
64
EXTERNAL LSAME, SLAMCH
65
* ..
66
* .. Executable Statements ..
67
*
68
TEMP1 = SLAMCH( CMACH )
69
*
70
IF( LSAME( CMACH, 'E' ).OR.LSAME( CMACH, 'S' ).OR.
71
$ LSAME( CMACH, 'M' ).OR.LSAME( CMACH, 'U' ) ) THEN
72
CALL MPI_ALLREDUCE( TEMP1, TEMP, 1, MPI_REAL,
73
$ MPI_MAX, ICTXT, IDUMM )
74
* CALL SGAMX2D( ICTXT, 'All', ' ', 1, 1, TEMP, 1, IDUMM,
75
* $ IDUMM, 1, -1, IDUMM )
76
ELSE IF( LSAME( CMACH, 'L' ).OR.LSAME( CMACH, 'O' ) ) THEN
77
CALL MPI_ALLREDUCE( TEMP1, TEMP, 1, MPI_REAL,
78
$ MPI_MIN, ICTXT, IDUMM )
79
* CALL SGAMN2D( ICTXT, 'All', ' ', 1, 1, TEMP, 1, IDUMM,
80
* $ IDUMM, 1, -1, IDUMM )
81
ELSE
82
TEMP = TEMP1
83
END IF
84
*
85
PSLAMCH10 = TEMP
86
*
87
* End of PSLAMCH
88
*
89
END
90
91