1 ! Bug reported by Brian Helinski
<bjh@absoft
.com
> on
4 Feb
2003
2 DOUBLE PRECISION FUNCTION DOPBL2
( SUBNAM
, M
, N
, KKL
, KKU
)
4 * -- LAPACK timing routine
(version
3.0) --
5 * Univ
. of Tennessee
, Univ
. of California Berkeley
, NAG Ltd
.,
6 * Courant Institute
, Argonne National Lab
, and Rice University
9 * .. Scalar Arguments
..
11 INTEGER KKL
, KKU
, M
, N
17 * DOPBL2 computes an approximation of the number of floating point
18 * operations used by a
subroutine SUBNAM with the given values
19 * of the parameters M
, N
, KL
, and KU
.
21 * This version counts operations
for the Level
2 BLAS
.
26 * SUBNAM
(input
) CHARACTER*6
27 * The name of the
subroutine.
30 * The number of rows of the coefficient matrix
. M
>= 0.
33 * The number of columns of the coefficient matrix
.
34 * If the matrix is square
(such as in a solve routine
) then
35 * N is the number of right hand sides
. N
>= 0.
38 * The lower band width of the coefficient matrix
.
39 * KL is set
to max
( 0, min
( M
-1, KKL
) ).
42 * The upper band width of the coefficient matrix
.
43 * KU is set
to max
( 0, min
( N
-1, KKU
) ).
45 * =====================================================================
51 DOUBLE PRECISION ADDS
, EK
, EM
, EN
, KL
, KU
, MULTS
53 * .. External Functions
..
55 EXTERNAL LSAME
, LSAMEN
57 * .. Intrinsic Functions
..
60 * .. Executable Statements
..
62 * Quick
return if possible
64 IF( M
.LE
.0 .OR
. .NOT
.( LSAME
( SUBNAM
, 'S' ) .OR
. LSAME
( SUBNAM
,
65 $
'D' ) .OR
. LSAME
( SUBNAM
, 'C' ) .OR
. LSAME
( SUBNAM
, 'Z' ) ) )
76 KL
= MAX
( 0, MIN
( M
-1, KKL
) )
77 KU
= MAX
( 0, MIN
( N
-1, KKU
) )
82 * -------------------------------
83 * Matrix
-vector multiply routines
84 * -------------------------------
86 IF( LSAMEN
( 3, C3
, 'MV ' ) ) THEN
88 IF( LSAMEN
( 2, C2
, 'GE' ) ) THEN
90 MULTS
= EM*
( EN
+1.D0
)
93 * Assume M
<= N
+ KL and KL
< M
94 * N
<= M
+ KU and KU
< N
95 * so that the zero sections are triangles
.
97 ELSE IF( LSAMEN
( 2, C2
, 'GB' ) ) THEN
99 MULTS
= EM*
( EN
+1.D0
) - ( EM
-1.D0
-KL
)*( EM
-KL
) / 2.D0
-
100 $
( EN
-1.D0
-KU
)*( EN
-KU
) / 2.D0
101 ADDS
= EM*
( EN
+1.D0
) - ( EM
-1.D0
-KL
)*( EM
-KL
) / 2.D0
-
102 $
( EN
-1.D0
-KU
)*( EN
-KU
) / 2.D0
104 ELSE IF( LSAMEN
( 2, C2
, 'SY' ) .OR
. LSAMEN
( 2, C2
, 'SP' ) .OR
.
105 $ LSAMEN
( 3, SUBNAM
, 'CHE' ) .OR
.
106 $ LSAMEN
( 3, SUBNAM
, 'ZHE' ) .OR
.
107 $ LSAMEN
( 3, SUBNAM
, 'CHP' ) .OR
.
108 $ LSAMEN
( 3, SUBNAM
, 'ZHP' ) ) THEN
110 MULTS
= EM*
( EM
+1.D0
)
113 ELSE IF( LSAMEN
( 2, C2
, 'SB' ) .OR
.
114 $ LSAMEN
( 3, SUBNAM
, 'CHB' ) .OR
.
115 $ LSAMEN
( 3, SUBNAM
, 'ZHB' ) ) THEN
117 MULTS
= EM*
( EM
+1.D0
) - ( EM
-1.D0
-EK
)*( EM
-EK
)
118 ADDS
= EM*EM
- ( EM
-1.D0
-EK
)*( EM
-EK
)
120 ELSE IF( LSAMEN
( 2, C2
, 'TR' ) .OR
. LSAMEN
( 2, C2
, 'TP' ) )
123 MULTS
= EM*
( EM
+1.D0
) / 2.D0
124 ADDS
= ( EM
-1.D0
)*EM
/ 2.D0
126 ELSE IF( LSAMEN
( 2, C2
, 'TB' ) ) THEN
128 MULTS
= EM*
( EM
+1.D0
) / 2.D0
-
129 $
( EM
-EK
-1.D0
)*( EM
-EK
) / 2.D0
130 ADDS
= ( EM
-1.D0
)*EM
/ 2.D0
-
131 $
( EM
-EK
-1.D0
)*( EM
-EK
) / 2.D0
135 * ---------------------
136 * Matrix solve routines
137 * ---------------------
139 ELSE IF( LSAMEN
( 3, C3
, 'SV ' ) ) THEN
141 IF( LSAMEN
( 2, C2
, 'TR' ) .OR
. LSAMEN
( 2, C2
, 'TP' ) ) THEN
143 MULTS
= EM*
( EM
+1.D0
) / 2.D0
144 ADDS
= ( EM
-1.D0
)*EM
/ 2.D0
146 ELSE IF( LSAMEN
( 2, C2
, 'TB' ) ) THEN
148 MULTS
= EM*
( EM
+1.D0
) / 2.D0
-
149 $
( EM
-EK
-1.D0
)*( EM
-EK
) / 2.D0
150 ADDS
= ( EM
-1.D0
)*EM
/ 2.D0
-
151 $
( EM
-EK
-1.D0
)*( EM
-EK
) / 2.D0
159 ELSE IF( LSAMEN
( 3, C3
, 'R ' ) ) THEN
161 IF( LSAMEN
( 3, SUBNAM
, 'SGE' ) .OR
.
162 $ LSAMEN
( 3, SUBNAM
, 'DGE' ) ) THEN
164 MULTS
= EM*EN
+ MIN
( EM
, EN
)
167 ELSE IF( LSAMEN
( 2, C2
, 'SY' ) .OR
. LSAMEN
( 2, C2
, 'SP' ) .OR
.
168 $ LSAMEN
( 3, SUBNAM
, 'CHE' ) .OR
.
169 $ LSAMEN
( 3, SUBNAM
, 'CHP' ) .OR
.
170 $ LSAMEN
( 3, SUBNAM
, 'ZHE' ) .OR
.
171 $ LSAMEN
( 3, SUBNAM
, 'ZHP' ) ) THEN
173 MULTS
= EM*
( EM
+1.D0
) / 2.D0
+ EM
174 ADDS
= EM*
( EM
+1.D0
) / 2.D0
178 ELSE IF( LSAMEN
( 3, C3
, 'RC ' ) .OR
. LSAMEN
( 3, C3
, 'RU ' ) ) THEN
180 IF( LSAMEN
( 3, SUBNAM
, 'CGE' ) .OR
.
181 $ LSAMEN
( 3, SUBNAM
, 'ZGE' ) ) THEN
183 MULTS
= EM*EN
+ MIN
( EM
, EN
)
192 ELSE IF( LSAMEN
( 3, C3
, 'R2 ' ) ) THEN
193 IF( LSAMEN
( 2, C2
, 'SY' ) .OR
. LSAMEN
( 2, C2
, 'SP' ) .OR
.
194 $ LSAMEN
( 3, SUBNAM
, 'CHE' ) .OR
.
195 $ LSAMEN
( 3, SUBNAM
, 'CHP' ) .OR
.
196 $ LSAMEN
( 3, SUBNAM
, 'ZHE' ) .OR
.
197 $ LSAMEN
( 3, SUBNAM
, 'ZHP' ) ) THEN
199 MULTS
= EM*
( EM
+1.D0
) + 2.D0*EM
200 ADDS
= EM*
( EM
+1.D0
)
205 * ------------------------------------------------
206 * Compute the total number of operations
.
207 * For real and
double precision routines
, count
208 * 1 for each multiply and
1 for each add
.
209 * For complex and complex*16 routines
, count
210 * 6 for each multiply and
2 for each add
.
211 * ------------------------------------------------
213 IF( LSAME
( C1
, 'S' ) .OR
. LSAME
( C1
, 'D' ) ) THEN
215 DOPBL2
= MULTS
+ ADDS
219 DOPBL2
= 6*MULTS
+ 2*ADDS