1      REAL             FUNCTION SOPBL2( SUBNAM, M, N, KKL, KKU )
2*
3*  -- LAPACK timing routine (version 3.0) --
4*     Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,
5*     Courant Institute, Argonne National Lab, and Rice University
6*     March 31, 1993
7*
8*     .. Scalar Arguments ..
9      CHARACTER*6        SUBNAM
10      INTEGER            KKL, KKU, M, N
11*     ..
12*
13*  Purpose
14*  =======
15*
16*  SOPBL2 computes an approximation of the number of floating point
17*  operations used by a subroutine SUBNAM with the given values
18*  of the parameters M, N, KL, and KU.
19*
20*  This version counts operations for the Level 2 BLAS.
21*
22*  Arguments
23*  =========
24*
25*  SUBNAM  (input) CHARACTER*6
26*          The name of the subroutine.
27*
28*  M       (input) INTEGER
29*          The number of rows of the coefficient matrix.  M >= 0.
30*
31*  N       (input) INTEGER
32*          The number of columns of the coefficient matrix.
33*          If the matrix is square (such as in a solve routine) then
34*          N is the number of right hand sides.  N >= 0.
35*
36*  KKL     (input) INTEGER
37*          The lower band width of the coefficient matrix.
38*          KL is set to max( 0, min( M-1, KKL ) ).
39*
40*  KKU     (input) INTEGER
41*          The upper band width of the coefficient matrix.
42*          KU is set to max( 0, min( N-1, KKU ) ).
43*
44*  =====================================================================
45*
46*     .. Local Scalars ..
47      CHARACTER          C1
48      CHARACTER*2        C2
49      CHARACTER*3        C3
50      REAL               ADDS, EK, EM, EN, KL, KU, MULTS
51*     ..
52*     .. External Functions ..
53      LOGICAL            LSAME, LSAMEN
54      EXTERNAL           LSAME, LSAMEN
55*     ..
56*     .. Intrinsic Functions ..
57      INTRINSIC          MAX, MIN
58*     ..
59*     .. Executable Statements ..
60*
61*     Quick return if possible
62*
63      IF( M.LE.0 .OR.
64     $   .NOT.( LSAME( SUBNAM, 'S' ) .OR. LSAME( SUBNAM, 'D' ) .OR.
65     $          LSAME( SUBNAM, 'C' ) .OR. LSAME( SUBNAM, 'Z' ) ) ) THEN
66         SOPBL2 = 0
67         RETURN
68      END IF
69*
70      C1 = SUBNAM( 1: 1 )
71      C2 = SUBNAM( 2: 3 )
72      C3 = SUBNAM( 4: 6 )
73      MULTS = 0
74      ADDS = 0
75      KL = MAX( 0, MIN( M-1, KKL ) )
76      KU = MAX( 0, MIN( N-1, KKU ) )
77      EM = M
78      EN = N
79      EK = KL
80*
81*     -------------------------------
82*     Matrix-vector multiply routines
83*     -------------------------------
84*
85      IF( LSAMEN( 3, C3, 'MV ' ) ) THEN
86*
87         IF( LSAMEN( 2, C2, 'GE' ) ) THEN
88*
89            MULTS = EM*( EN+1. )
90            ADDS = EM*EN
91*
92*        Assume M <= N + KL and KL < M
93*               N <= M + KU and KU < N
94*        so that the zero sections are triangles.
95*
96         ELSE IF( LSAMEN( 2, C2, 'GB' ) ) THEN
97*
98            MULTS = EM*( EN+1. ) - ( EM-1.-KL )*( EM-KL ) / 2. -
99     $              ( EN-1.-KU )*( EN-KU ) / 2.
100            ADDS = EM*( EN+1. ) - ( EM-1.-KL )*( EM-KL ) / 2. -
101     $             ( EN-1.-KU )*( EN-KU ) / 2.
102*
103         ELSE IF( LSAMEN( 2, C2, 'SY' ) .OR. LSAMEN( 2, C2, 'SP' ) .OR.
104     $            LSAMEN( 3, SUBNAM, 'CHE' ) .OR.
105     $            LSAMEN( 3, SUBNAM, 'ZHE' ) .OR.
106     $            LSAMEN( 3, SUBNAM, 'CHP' ) .OR.
107     $            LSAMEN( 3, SUBNAM, 'ZHP' ) ) THEN
108*
109            MULTS = EM*( EM+1. )
110            ADDS = EM*EM
111*
112         ELSE IF( LSAMEN( 2, C2, 'SB' ) .OR.
113     $            LSAMEN( 3, SUBNAM, 'CHB' ) .OR.
114     $            LSAMEN( 3, SUBNAM, 'ZHB' ) ) THEN
115*
116            MULTS = EM*( EM+1. ) - ( EM-1.-EK )*( EM-EK )
117            ADDS = EM*EM - ( EM-1.-EK )*( EM-EK )
118*
119         ELSE IF( LSAMEN( 2, C2, 'TR' ) .OR. LSAMEN( 2, C2, 'TP' ) )
120     $             THEN
121*
122            MULTS = EM*( EM+1. ) / 2.
123            ADDS = ( EM-1. )*EM / 2.
124*
125         ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN
126*
127            MULTS = EM*( EM+1. ) / 2. - ( EM-EK-1. )*( EM-EK ) / 2.
128            ADDS = ( EM-1. )*EM / 2. - ( EM-EK-1. )*( EM-EK ) / 2.
129*
130         END IF
131*
132*     ---------------------
133*     Matrix solve routines
134*     ---------------------
135*
136      ELSE IF( LSAMEN( 3, C3, 'SV ' ) ) THEN
137*
138         IF( LSAMEN( 2, C2, 'TR' ) .OR. LSAMEN( 2, C2, 'TP' ) ) THEN
139*
140            MULTS = EM*( EM+1. ) / 2.
141            ADDS = ( EM-1. )*EM / 2.
142*
143         ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN
144*
145            MULTS = EM*( EM+1. ) / 2. - ( EM-EK-1. )*( EM-EK ) / 2.
146            ADDS = ( EM-1. )*EM / 2. - ( EM-EK-1. )*( EM-EK ) / 2.
147*
148         END IF
149*
150*     ----------------
151*     Rank-one updates
152*     ----------------
153*
154      ELSE IF( LSAMEN( 3, C3, 'R  ' ) ) THEN
155*
156         IF( LSAMEN( 3, SUBNAM, 'SGE' ) .OR.
157     $       LSAMEN( 3, SUBNAM, 'DGE' ) ) THEN
158*
159            MULTS = EM*EN + MIN( EM, EN )
160            ADDS = EM*EN
161*
162         ELSE IF( LSAMEN( 2, C2, 'SY' ) .OR. LSAMEN( 2, C2, 'SP' ) .OR.
163     $            LSAMEN( 3, SUBNAM, 'CHE' ) .OR.
164     $            LSAMEN( 3, SUBNAM, 'CHP' ) .OR.
165     $            LSAMEN( 3, SUBNAM, 'ZHE' ) .OR.
166     $            LSAMEN( 3, SUBNAM, 'ZHP' ) ) THEN
167*
168            MULTS = EM*( EM+1. ) / 2. + EM
169            ADDS = EM*( EM+1. ) / 2.
170*
171         END IF
172*
173      ELSE IF( LSAMEN( 3, C3, 'RC ' ) .OR. LSAMEN( 3, C3, 'RU ' ) ) THEN
174*
175         IF( LSAMEN( 3, SUBNAM, 'CGE' ) .OR.
176     $       LSAMEN( 3, SUBNAM, 'ZGE' ) ) THEN
177*
178            MULTS = EM*EN + MIN( EM, EN )
179            ADDS = EM*EN
180*
181         END IF
182*
183*     ----------------
184*     Rank-two updates
185*     ----------------
186*
187      ELSE IF( LSAMEN( 3, C3, 'R2 ' ) ) THEN
188         IF( LSAMEN( 2, C2, 'SY' ) .OR. LSAMEN( 2, C2, 'SP' ) .OR.
189     $       LSAMEN( 3, SUBNAM, 'CHE' ) .OR.
190     $       LSAMEN( 3, SUBNAM, 'CHP' ) .OR.
191     $       LSAMEN( 3, SUBNAM, 'ZHE' ) .OR.
192     $       LSAMEN( 3, SUBNAM, 'ZHP' ) ) THEN
193*
194            MULTS = EM*( EM+1. ) + 2.*EM
195            ADDS = EM*( EM+1. )
196*
197         END IF
198      END IF
199*
200*     ------------------------------------------------
201*     Compute the total number of operations.
202*     For real and double precision routines, count
203*        1 for each multiply and 1 for each add.
204*     For complex and complex*16 routines, count
205*        6 for each multiply and 2 for each add.
206*     ------------------------------------------------
207*
208      IF( LSAME( C1, 'S' ) .OR. LSAME( C1, 'D' ) ) THEN
209*
210         SOPBL2 = MULTS + ADDS
211*
212      ELSE
213*
214         SOPBL2 = 6*MULTS + 2*ADDS
215*
216      END IF
217*
218      RETURN
219*
220*     End of SOPBL2
221*
222      END
223