c++: Fix handling of the `final` contextual keyword
[geany-mirror.git] / tests / ctags / dopbl2.f
blobd4b14fbb900c999414f9cc1c03ab77f7d338848b
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
7 * June 30, 1999
9 * .. Scalar Arguments ..
10 CHARACTER*6 SUBNAM
11 INTEGER KKL, KKU, M, N
12 * ..
14 * Purpose
15 * =======
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.
23 * Arguments
24 * =========
26 * SUBNAM (input) CHARACTER*6
27 * The name of the subroutine.
29 * M (input) INTEGER
30 * The number of rows of the coefficient matrix. M >= 0.
32 * N (input) INTEGER
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.
37 * KKL (input) INTEGER
38 * The lower band width of the coefficient matrix.
39 * KL is set to max( 0, min( M-1, KKL ) ).
41 * KKU (input) INTEGER
42 * The upper band width of the coefficient matrix.
43 * KU is set to max( 0, min( N-1, KKU ) ).
45 * =====================================================================
47 * .. Local Scalars ..
48 CHARACTER C1
49 CHARACTER*2 C2
50 CHARACTER*3 C3
51 DOUBLE PRECISION ADDS, EK, EM, EN, KL, KU, MULTS
52 * ..
53 * .. External Functions ..
54 LOGICAL LSAME, LSAMEN
55 EXTERNAL LSAME, LSAMEN
56 * ..
57 * .. Intrinsic Functions ..
58 INTRINSIC MAX, MIN
59 * ..
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' ) ) )
66 $ THEN
67 DOPBL2 = 0
68 RETURN
69 END IF
71 C1 = SUBNAM( 1: 1 )
72 C2 = SUBNAM( 2: 3 )
73 C3 = SUBNAM( 4: 6 )
74 MULTS = 0
75 ADDS = 0
76 KL = MAX( 0, MIN( M-1, KKL ) )
77 KU = MAX( 0, MIN( N-1, KKU ) )
78 EM = M
79 EN = N
80 EK = KL
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 )
91 ADDS = EM*EN
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 )
111 ADDS = EM*EM
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' ) )
121 $ THEN
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
133 END IF
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
153 END IF
155 * ----------------
156 * Rank-one updates
157 * ----------------
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 )
165 ADDS = 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
176 END IF
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 )
184 ADDS = EM*EN
186 END IF
188 * ----------------
189 * Rank-two updates
190 * ----------------
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 )
202 END IF
203 END IF
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
217 ELSE
219 DOPBL2 = 6*MULTS + 2*ADDS
221 END IF
223 RETURN
225 * End of DOPBL2