![]() |
LAPACK
3.4.0
LAPACK: Linear Algebra PACKage
|
00001 *> \brief \b CBLAT1 00002 * 00003 * =========== DOCUMENTATION =========== 00004 * 00005 * Online html documentation available at 00006 * http://www.netlib.org/lapack/explore-html/ 00007 * 00008 * Definition: 00009 * =========== 00010 * 00011 * PROGRAM CBLAT1 00012 * 00013 * 00014 *> \par Purpose: 00015 * ============= 00016 *> 00017 *> \verbatim 00018 *> 00019 *> Test program for the COMPLEX Level 1 BLAS. 00020 *> Based upon the original BLAS test routine together with: 00021 *> 00022 *> F06GAF Example Program Text 00023 *> \endverbatim 00024 * 00025 * Authors: 00026 * ======== 00027 * 00028 *> \author Univ. of Tennessee 00029 *> \author Univ. of California Berkeley 00030 *> \author Univ. of Colorado Denver 00031 *> \author NAG Ltd. 00032 * 00033 *> \date November 2011 00034 * 00035 *> \ingroup complex_blas_testing 00036 * 00037 * ===================================================================== PROGRAM CBLAT1 00038 * 00039 * -- Reference BLAS test routine (version 3.4.0) -- 00040 * -- Reference BLAS is a software package provided by Univ. of Tennessee, -- 00041 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 00042 * November 2011 00043 * 00044 * ===================================================================== 00045 * 00046 * .. Parameters .. 00047 INTEGER NOUT 00048 PARAMETER (NOUT=6) 00049 * .. Scalars in Common .. 00050 INTEGER ICASE, INCX, INCY, MODE, N 00051 LOGICAL PASS 00052 * .. Local Scalars .. 00053 REAL SFAC 00054 INTEGER IC 00055 * .. External Subroutines .. 00056 EXTERNAL CHECK1, CHECK2, HEADER 00057 * .. Common blocks .. 00058 COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS 00059 * .. Data statements .. 00060 DATA SFAC/9.765625E-4/ 00061 * .. Executable Statements .. 00062 WRITE (NOUT,99999) 00063 DO 20 IC = 1, 10 00064 ICASE = IC 00065 CALL HEADER 00066 * 00067 * Initialize PASS, INCX, INCY, and MODE for a new case. 00068 * The value 9999 for INCX, INCY or MODE will appear in the 00069 * detailed output, if any, for cases that do not involve 00070 * these parameters. 00071 * 00072 PASS = .TRUE. 00073 INCX = 9999 00074 INCY = 9999 00075 MODE = 9999 00076 IF (ICASE.LE.5) THEN 00077 CALL CHECK2(SFAC) 00078 ELSE IF (ICASE.GE.6) THEN 00079 CALL CHECK1(SFAC) 00080 END IF 00081 * -- Print 00082 IF (PASS) WRITE (NOUT,99998) 00083 20 CONTINUE 00084 STOP 00085 * 00086 99999 FORMAT (' Complex BLAS Test Program Results',/1X) 00087 99998 FORMAT (' ----- PASS -----') 00088 END 00089 SUBROUTINE HEADER 00090 * .. Parameters .. 00091 INTEGER NOUT 00092 PARAMETER (NOUT=6) 00093 * .. Scalars in Common .. 00094 INTEGER ICASE, INCX, INCY, MODE, N 00095 LOGICAL PASS 00096 * .. Local Arrays .. 00097 CHARACTER*6 L(10) 00098 * .. Common blocks .. 00099 COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS 00100 * .. Data statements .. 00101 DATA L(1)/'CDOTC '/ 00102 DATA L(2)/'CDOTU '/ 00103 DATA L(3)/'CAXPY '/ 00104 DATA L(4)/'CCOPY '/ 00105 DATA L(5)/'CSWAP '/ 00106 DATA L(6)/'SCNRM2'/ 00107 DATA L(7)/'SCASUM'/ 00108 DATA L(8)/'CSCAL '/ 00109 DATA L(9)/'CSSCAL'/ 00110 DATA L(10)/'ICAMAX'/ 00111 * .. Executable Statements .. 00112 WRITE (NOUT,99999) ICASE, L(ICASE) 00113 RETURN 00114 * 00115 99999 FORMAT (/' Test of subprogram number',I3,12X,A6) 00116 END 00117 SUBROUTINE CHECK1(SFAC) 00118 * .. Parameters .. 00119 INTEGER NOUT 00120 PARAMETER (NOUT=6) 00121 * .. Scalar Arguments .. 00122 REAL SFAC 00123 * .. Scalars in Common .. 00124 INTEGER ICASE, INCX, INCY, MODE, N 00125 LOGICAL PASS 00126 * .. Local Scalars .. 00127 COMPLEX CA 00128 REAL SA 00129 INTEGER I, J, LEN, NP1 00130 * .. Local Arrays .. 00131 COMPLEX CTRUE5(8,5,2), CTRUE6(8,5,2), CV(8,5,2), CX(8), 00132 + MWPCS(5), MWPCT(5) 00133 REAL STRUE2(5), STRUE4(5) 00134 INTEGER ITRUE3(5) 00135 * .. External Functions .. 00136 REAL SCASUM, SCNRM2 00137 INTEGER ICAMAX 00138 EXTERNAL SCASUM, SCNRM2, ICAMAX 00139 * .. External Subroutines .. 00140 EXTERNAL CSCAL, CSSCAL, CTEST, ITEST1, STEST1 00141 * .. Intrinsic Functions .. 00142 INTRINSIC MAX 00143 * .. Common blocks .. 00144 COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS 00145 * .. Data statements .. 00146 DATA SA, CA/0.3E0, (0.4E0,-0.7E0)/ 00147 DATA ((CV(I,J,1),I=1,8),J=1,5)/(0.1E0,0.1E0), 00148 + (1.0E0,2.0E0), (1.0E0,2.0E0), (1.0E0,2.0E0), 00149 + (1.0E0,2.0E0), (1.0E0,2.0E0), (1.0E0,2.0E0), 00150 + (1.0E0,2.0E0), (0.3E0,-0.4E0), (3.0E0,4.0E0), 00151 + (3.0E0,4.0E0), (3.0E0,4.0E0), (3.0E0,4.0E0), 00152 + (3.0E0,4.0E0), (3.0E0,4.0E0), (3.0E0,4.0E0), 00153 + (0.1E0,-0.3E0), (0.5E0,-0.1E0), (5.0E0,6.0E0), 00154 + (5.0E0,6.0E0), (5.0E0,6.0E0), (5.0E0,6.0E0), 00155 + (5.0E0,6.0E0), (5.0E0,6.0E0), (0.1E0,0.1E0), 00156 + (-0.6E0,0.1E0), (0.1E0,-0.3E0), (7.0E0,8.0E0), 00157 + (7.0E0,8.0E0), (7.0E0,8.0E0), (7.0E0,8.0E0), 00158 + (7.0E0,8.0E0), (0.3E0,0.1E0), (0.5E0,0.0E0), 00159 + (0.0E0,0.5E0), (0.0E0,0.2E0), (2.0E0,3.0E0), 00160 + (2.0E0,3.0E0), (2.0E0,3.0E0), (2.0E0,3.0E0)/ 00161 DATA ((CV(I,J,2),I=1,8),J=1,5)/(0.1E0,0.1E0), 00162 + (4.0E0,5.0E0), (4.0E0,5.0E0), (4.0E0,5.0E0), 00163 + (4.0E0,5.0E0), (4.0E0,5.0E0), (4.0E0,5.0E0), 00164 + (4.0E0,5.0E0), (0.3E0,-0.4E0), (6.0E0,7.0E0), 00165 + (6.0E0,7.0E0), (6.0E0,7.0E0), (6.0E0,7.0E0), 00166 + (6.0E0,7.0E0), (6.0E0,7.0E0), (6.0E0,7.0E0), 00167 + (0.1E0,-0.3E0), (8.0E0,9.0E0), (0.5E0,-0.1E0), 00168 + (2.0E0,5.0E0), (2.0E0,5.0E0), (2.0E0,5.0E0), 00169 + (2.0E0,5.0E0), (2.0E0,5.0E0), (0.1E0,0.1E0), 00170 + (3.0E0,6.0E0), (-0.6E0,0.1E0), (4.0E0,7.0E0), 00171 + (0.1E0,-0.3E0), (7.0E0,2.0E0), (7.0E0,2.0E0), 00172 + (7.0E0,2.0E0), (0.3E0,0.1E0), (5.0E0,8.0E0), 00173 + (0.5E0,0.0E0), (6.0E0,9.0E0), (0.0E0,0.5E0), 00174 + (8.0E0,3.0E0), (0.0E0,0.2E0), (9.0E0,4.0E0)/ 00175 DATA STRUE2/0.0E0, 0.5E0, 0.6E0, 0.7E0, 0.8E0/ 00176 DATA STRUE4/0.0E0, 0.7E0, 1.0E0, 1.3E0, 1.6E0/ 00177 DATA ((CTRUE5(I,J,1),I=1,8),J=1,5)/(0.1E0,0.1E0), 00178 + (1.0E0,2.0E0), (1.0E0,2.0E0), (1.0E0,2.0E0), 00179 + (1.0E0,2.0E0), (1.0E0,2.0E0), (1.0E0,2.0E0), 00180 + (1.0E0,2.0E0), (-0.16E0,-0.37E0), (3.0E0,4.0E0), 00181 + (3.0E0,4.0E0), (3.0E0,4.0E0), (3.0E0,4.0E0), 00182 + (3.0E0,4.0E0), (3.0E0,4.0E0), (3.0E0,4.0E0), 00183 + (-0.17E0,-0.19E0), (0.13E0,-0.39E0), 00184 + (5.0E0,6.0E0), (5.0E0,6.0E0), (5.0E0,6.0E0), 00185 + (5.0E0,6.0E0), (5.0E0,6.0E0), (5.0E0,6.0E0), 00186 + (0.11E0,-0.03E0), (-0.17E0,0.46E0), 00187 + (-0.17E0,-0.19E0), (7.0E0,8.0E0), (7.0E0,8.0E0), 00188 + (7.0E0,8.0E0), (7.0E0,8.0E0), (7.0E0,8.0E0), 00189 + (0.19E0,-0.17E0), (0.20E0,-0.35E0), 00190 + (0.35E0,0.20E0), (0.14E0,0.08E0), 00191 + (2.0E0,3.0E0), (2.0E0,3.0E0), (2.0E0,3.0E0), 00192 + (2.0E0,3.0E0)/ 00193 DATA ((CTRUE5(I,J,2),I=1,8),J=1,5)/(0.1E0,0.1E0), 00194 + (4.0E0,5.0E0), (4.0E0,5.0E0), (4.0E0,5.0E0), 00195 + (4.0E0,5.0E0), (4.0E0,5.0E0), (4.0E0,5.0E0), 00196 + (4.0E0,5.0E0), (-0.16E0,-0.37E0), (6.0E0,7.0E0), 00197 + (6.0E0,7.0E0), (6.0E0,7.0E0), (6.0E0,7.0E0), 00198 + (6.0E0,7.0E0), (6.0E0,7.0E0), (6.0E0,7.0E0), 00199 + (-0.17E0,-0.19E0), (8.0E0,9.0E0), 00200 + (0.13E0,-0.39E0), (2.0E0,5.0E0), (2.0E0,5.0E0), 00201 + (2.0E0,5.0E0), (2.0E0,5.0E0), (2.0E0,5.0E0), 00202 + (0.11E0,-0.03E0), (3.0E0,6.0E0), 00203 + (-0.17E0,0.46E0), (4.0E0,7.0E0), 00204 + (-0.17E0,-0.19E0), (7.0E0,2.0E0), (7.0E0,2.0E0), 00205 + (7.0E0,2.0E0), (0.19E0,-0.17E0), (5.0E0,8.0E0), 00206 + (0.20E0,-0.35E0), (6.0E0,9.0E0), 00207 + (0.35E0,0.20E0), (8.0E0,3.0E0), 00208 + (0.14E0,0.08E0), (9.0E0,4.0E0)/ 00209 DATA ((CTRUE6(I,J,1),I=1,8),J=1,5)/(0.1E0,0.1E0), 00210 + (1.0E0,2.0E0), (1.0E0,2.0E0), (1.0E0,2.0E0), 00211 + (1.0E0,2.0E0), (1.0E0,2.0E0), (1.0E0,2.0E0), 00212 + (1.0E0,2.0E0), (0.09E0,-0.12E0), (3.0E0,4.0E0), 00213 + (3.0E0,4.0E0), (3.0E0,4.0E0), (3.0E0,4.0E0), 00214 + (3.0E0,4.0E0), (3.0E0,4.0E0), (3.0E0,4.0E0), 00215 + (0.03E0,-0.09E0), (0.15E0,-0.03E0), 00216 + (5.0E0,6.0E0), (5.0E0,6.0E0), (5.0E0,6.0E0), 00217 + (5.0E0,6.0E0), (5.0E0,6.0E0), (5.0E0,6.0E0), 00218 + (0.03E0,0.03E0), (-0.18E0,0.03E0), 00219 + (0.03E0,-0.09E0), (7.0E0,8.0E0), (7.0E0,8.0E0), 00220 + (7.0E0,8.0E0), (7.0E0,8.0E0), (7.0E0,8.0E0), 00221 + (0.09E0,0.03E0), (0.15E0,0.00E0), 00222 + (0.00E0,0.15E0), (0.00E0,0.06E0), (2.0E0,3.0E0), 00223 + (2.0E0,3.0E0), (2.0E0,3.0E0), (2.0E0,3.0E0)/ 00224 DATA ((CTRUE6(I,J,2),I=1,8),J=1,5)/(0.1E0,0.1E0), 00225 + (4.0E0,5.0E0), (4.0E0,5.0E0), (4.0E0,5.0E0), 00226 + (4.0E0,5.0E0), (4.0E0,5.0E0), (4.0E0,5.0E0), 00227 + (4.0E0,5.0E0), (0.09E0,-0.12E0), (6.0E0,7.0E0), 00228 + (6.0E0,7.0E0), (6.0E0,7.0E0), (6.0E0,7.0E0), 00229 + (6.0E0,7.0E0), (6.0E0,7.0E0), (6.0E0,7.0E0), 00230 + (0.03E0,-0.09E0), (8.0E0,9.0E0), 00231 + (0.15E0,-0.03E0), (2.0E0,5.0E0), (2.0E0,5.0E0), 00232 + (2.0E0,5.0E0), (2.0E0,5.0E0), (2.0E0,5.0E0), 00233 + (0.03E0,0.03E0), (3.0E0,6.0E0), 00234 + (-0.18E0,0.03E0), (4.0E0,7.0E0), 00235 + (0.03E0,-0.09E0), (7.0E0,2.0E0), (7.0E0,2.0E0), 00236 + (7.0E0,2.0E0), (0.09E0,0.03E0), (5.0E0,8.0E0), 00237 + (0.15E0,0.00E0), (6.0E0,9.0E0), (0.00E0,0.15E0), 00238 + (8.0E0,3.0E0), (0.00E0,0.06E0), (9.0E0,4.0E0)/ 00239 DATA ITRUE3/0, 1, 2, 2, 2/ 00240 * .. Executable Statements .. 00241 DO 60 INCX = 1, 2 00242 DO 40 NP1 = 1, 5 00243 N = NP1 - 1 00244 LEN = 2*MAX(N,1) 00245 * .. Set vector arguments .. 00246 DO 20 I = 1, LEN 00247 CX(I) = CV(I,NP1,INCX) 00248 20 CONTINUE 00249 IF (ICASE.EQ.6) THEN 00250 * .. SCNRM2 .. 00251 CALL STEST1(SCNRM2(N,CX,INCX),STRUE2(NP1),STRUE2(NP1), 00252 + SFAC) 00253 ELSE IF (ICASE.EQ.7) THEN 00254 * .. SCASUM .. 00255 CALL STEST1(SCASUM(N,CX,INCX),STRUE4(NP1),STRUE4(NP1), 00256 + SFAC) 00257 ELSE IF (ICASE.EQ.8) THEN 00258 * .. CSCAL .. 00259 CALL CSCAL(N,CA,CX,INCX) 00260 CALL CTEST(LEN,CX,CTRUE5(1,NP1,INCX),CTRUE5(1,NP1,INCX), 00261 + SFAC) 00262 ELSE IF (ICASE.EQ.9) THEN 00263 * .. CSSCAL .. 00264 CALL CSSCAL(N,SA,CX,INCX) 00265 CALL CTEST(LEN,CX,CTRUE6(1,NP1,INCX),CTRUE6(1,NP1,INCX), 00266 + SFAC) 00267 ELSE IF (ICASE.EQ.10) THEN 00268 * .. ICAMAX .. 00269 CALL ITEST1(ICAMAX(N,CX,INCX),ITRUE3(NP1)) 00270 ELSE 00271 WRITE (NOUT,*) ' Shouldn''t be here in CHECK1' 00272 STOP 00273 END IF 00274 * 00275 40 CONTINUE 00276 60 CONTINUE 00277 * 00278 INCX = 1 00279 IF (ICASE.EQ.8) THEN 00280 * CSCAL 00281 * Add a test for alpha equal to zero. 00282 CA = (0.0E0,0.0E0) 00283 DO 80 I = 1, 5 00284 MWPCT(I) = (0.0E0,0.0E0) 00285 MWPCS(I) = (1.0E0,1.0E0) 00286 80 CONTINUE 00287 CALL CSCAL(5,CA,CX,INCX) 00288 CALL CTEST(5,CX,MWPCT,MWPCS,SFAC) 00289 ELSE IF (ICASE.EQ.9) THEN 00290 * CSSCAL 00291 * Add a test for alpha equal to zero. 00292 SA = 0.0E0 00293 DO 100 I = 1, 5 00294 MWPCT(I) = (0.0E0,0.0E0) 00295 MWPCS(I) = (1.0E0,1.0E0) 00296 100 CONTINUE 00297 CALL CSSCAL(5,SA,CX,INCX) 00298 CALL CTEST(5,CX,MWPCT,MWPCS,SFAC) 00299 * Add a test for alpha equal to one. 00300 SA = 1.0E0 00301 DO 120 I = 1, 5 00302 MWPCT(I) = CX(I) 00303 MWPCS(I) = CX(I) 00304 120 CONTINUE 00305 CALL CSSCAL(5,SA,CX,INCX) 00306 CALL CTEST(5,CX,MWPCT,MWPCS,SFAC) 00307 * Add a test for alpha equal to minus one. 00308 SA = -1.0E0 00309 DO 140 I = 1, 5 00310 MWPCT(I) = -CX(I) 00311 MWPCS(I) = -CX(I) 00312 140 CONTINUE 00313 CALL CSSCAL(5,SA,CX,INCX) 00314 CALL CTEST(5,CX,MWPCT,MWPCS,SFAC) 00315 END IF 00316 RETURN 00317 END 00318 SUBROUTINE CHECK2(SFAC) 00319 * .. Parameters .. 00320 INTEGER NOUT 00321 PARAMETER (NOUT=6) 00322 * .. Scalar Arguments .. 00323 REAL SFAC 00324 * .. Scalars in Common .. 00325 INTEGER ICASE, INCX, INCY, MODE, N 00326 LOGICAL PASS 00327 * .. Local Scalars .. 00328 COMPLEX CA 00329 INTEGER I, J, KI, KN, KSIZE, LENX, LENY, MX, MY 00330 * .. Local Arrays .. 00331 COMPLEX CDOT(1), CSIZE1(4), CSIZE2(7,2), CSIZE3(14), 00332 + CT10X(7,4,4), CT10Y(7,4,4), CT6(4,4), CT7(4,4), 00333 + CT8(7,4,4), CX(7), CX1(7), CY(7), CY1(7) 00334 INTEGER INCXS(4), INCYS(4), LENS(4,2), NS(4) 00335 * .. External Functions .. 00336 COMPLEX CDOTC, CDOTU 00337 EXTERNAL CDOTC, CDOTU 00338 * .. External Subroutines .. 00339 EXTERNAL CAXPY, CCOPY, CSWAP, CTEST 00340 * .. Intrinsic Functions .. 00341 INTRINSIC ABS, MIN 00342 * .. Common blocks .. 00343 COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS 00344 * .. Data statements .. 00345 DATA CA/(0.4E0,-0.7E0)/ 00346 DATA INCXS/1, 2, -2, -1/ 00347 DATA INCYS/1, -2, 1, -2/ 00348 DATA LENS/1, 1, 2, 4, 1, 1, 3, 7/ 00349 DATA NS/0, 1, 2, 4/ 00350 DATA CX1/(0.7E0,-0.8E0), (-0.4E0,-0.7E0), 00351 + (-0.1E0,-0.9E0), (0.2E0,-0.8E0), 00352 + (-0.9E0,-0.4E0), (0.1E0,0.4E0), (-0.6E0,0.6E0)/ 00353 DATA CY1/(0.6E0,-0.6E0), (-0.9E0,0.5E0), 00354 + (0.7E0,-0.6E0), (0.1E0,-0.5E0), (-0.1E0,-0.2E0), 00355 + (-0.5E0,-0.3E0), (0.8E0,-0.7E0)/ 00356 DATA ((CT8(I,J,1),I=1,7),J=1,4)/(0.6E0,-0.6E0), 00357 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00358 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00359 + (0.32E0,-1.41E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00360 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00361 + (0.0E0,0.0E0), (0.32E0,-1.41E0), 00362 + (-1.55E0,0.5E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00363 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00364 + (0.32E0,-1.41E0), (-1.55E0,0.5E0), 00365 + (0.03E0,-0.89E0), (-0.38E0,-0.96E0), 00366 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0)/ 00367 DATA ((CT8(I,J,2),I=1,7),J=1,4)/(0.6E0,-0.6E0), 00368 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00369 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00370 + (0.32E0,-1.41E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00371 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00372 + (0.0E0,0.0E0), (-0.07E0,-0.89E0), 00373 + (-0.9E0,0.5E0), (0.42E0,-1.41E0), (0.0E0,0.0E0), 00374 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00375 + (0.78E0,0.06E0), (-0.9E0,0.5E0), 00376 + (0.06E0,-0.13E0), (0.1E0,-0.5E0), 00377 + (-0.77E0,-0.49E0), (-0.5E0,-0.3E0), 00378 + (0.52E0,-1.51E0)/ 00379 DATA ((CT8(I,J,3),I=1,7),J=1,4)/(0.6E0,-0.6E0), 00380 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00381 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00382 + (0.32E0,-1.41E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00383 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00384 + (0.0E0,0.0E0), (-0.07E0,-0.89E0), 00385 + (-1.18E0,-0.31E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00386 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00387 + (0.78E0,0.06E0), (-1.54E0,0.97E0), 00388 + (0.03E0,-0.89E0), (-0.18E0,-1.31E0), 00389 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0)/ 00390 DATA ((CT8(I,J,4),I=1,7),J=1,4)/(0.6E0,-0.6E0), 00391 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00392 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00393 + (0.32E0,-1.41E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00394 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00395 + (0.0E0,0.0E0), (0.32E0,-1.41E0), (-0.9E0,0.5E0), 00396 + (0.05E0,-0.6E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00397 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.32E0,-1.41E0), 00398 + (-0.9E0,0.5E0), (0.05E0,-0.6E0), (0.1E0,-0.5E0), 00399 + (-0.77E0,-0.49E0), (-0.5E0,-0.3E0), 00400 + (0.32E0,-1.16E0)/ 00401 DATA CT7/(0.0E0,0.0E0), (-0.06E0,-0.90E0), 00402 + (0.65E0,-0.47E0), (-0.34E0,-1.22E0), 00403 + (0.0E0,0.0E0), (-0.06E0,-0.90E0), 00404 + (-0.59E0,-1.46E0), (-1.04E0,-0.04E0), 00405 + (0.0E0,0.0E0), (-0.06E0,-0.90E0), 00406 + (-0.83E0,0.59E0), (0.07E0,-0.37E0), 00407 + (0.0E0,0.0E0), (-0.06E0,-0.90E0), 00408 + (-0.76E0,-1.15E0), (-1.33E0,-1.82E0)/ 00409 DATA CT6/(0.0E0,0.0E0), (0.90E0,0.06E0), 00410 + (0.91E0,-0.77E0), (1.80E0,-0.10E0), 00411 + (0.0E0,0.0E0), (0.90E0,0.06E0), (1.45E0,0.74E0), 00412 + (0.20E0,0.90E0), (0.0E0,0.0E0), (0.90E0,0.06E0), 00413 + (-0.55E0,0.23E0), (0.83E0,-0.39E0), 00414 + (0.0E0,0.0E0), (0.90E0,0.06E0), (1.04E0,0.79E0), 00415 + (1.95E0,1.22E0)/ 00416 DATA ((CT10X(I,J,1),I=1,7),J=1,4)/(0.7E0,-0.8E0), 00417 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00418 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00419 + (0.6E0,-0.6E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00420 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00421 + (0.0E0,0.0E0), (0.6E0,-0.6E0), (-0.9E0,0.5E0), 00422 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00423 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.6E0,-0.6E0), 00424 + (-0.9E0,0.5E0), (0.7E0,-0.6E0), (0.1E0,-0.5E0), 00425 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0)/ 00426 DATA ((CT10X(I,J,2),I=1,7),J=1,4)/(0.7E0,-0.8E0), 00427 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00428 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00429 + (0.6E0,-0.6E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00430 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00431 + (0.0E0,0.0E0), (0.7E0,-0.6E0), (-0.4E0,-0.7E0), 00432 + (0.6E0,-0.6E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00433 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.8E0,-0.7E0), 00434 + (-0.4E0,-0.7E0), (-0.1E0,-0.2E0), 00435 + (0.2E0,-0.8E0), (0.7E0,-0.6E0), (0.1E0,0.4E0), 00436 + (0.6E0,-0.6E0)/ 00437 DATA ((CT10X(I,J,3),I=1,7),J=1,4)/(0.7E0,-0.8E0), 00438 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00439 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00440 + (0.6E0,-0.6E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00441 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00442 + (0.0E0,0.0E0), (-0.9E0,0.5E0), (-0.4E0,-0.7E0), 00443 + (0.6E0,-0.6E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00444 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.1E0,-0.5E0), 00445 + (-0.4E0,-0.7E0), (0.7E0,-0.6E0), (0.2E0,-0.8E0), 00446 + (-0.9E0,0.5E0), (0.1E0,0.4E0), (0.6E0,-0.6E0)/ 00447 DATA ((CT10X(I,J,4),I=1,7),J=1,4)/(0.7E0,-0.8E0), 00448 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00449 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00450 + (0.6E0,-0.6E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00451 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00452 + (0.0E0,0.0E0), (0.6E0,-0.6E0), (0.7E0,-0.6E0), 00453 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00454 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.6E0,-0.6E0), 00455 + (0.7E0,-0.6E0), (-0.1E0,-0.2E0), (0.8E0,-0.7E0), 00456 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0)/ 00457 DATA ((CT10Y(I,J,1),I=1,7),J=1,4)/(0.6E0,-0.6E0), 00458 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00459 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00460 + (0.7E0,-0.8E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00461 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00462 + (0.0E0,0.0E0), (0.7E0,-0.8E0), (-0.4E0,-0.7E0), 00463 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00464 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.7E0,-0.8E0), 00465 + (-0.4E0,-0.7E0), (-0.1E0,-0.9E0), 00466 + (0.2E0,-0.8E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00467 + (0.0E0,0.0E0)/ 00468 DATA ((CT10Y(I,J,2),I=1,7),J=1,4)/(0.6E0,-0.6E0), 00469 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00470 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00471 + (0.7E0,-0.8E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00472 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00473 + (0.0E0,0.0E0), (-0.1E0,-0.9E0), (-0.9E0,0.5E0), 00474 + (0.7E0,-0.8E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00475 + (0.0E0,0.0E0), (0.0E0,0.0E0), (-0.6E0,0.6E0), 00476 + (-0.9E0,0.5E0), (-0.9E0,-0.4E0), (0.1E0,-0.5E0), 00477 + (-0.1E0,-0.9E0), (-0.5E0,-0.3E0), 00478 + (0.7E0,-0.8E0)/ 00479 DATA ((CT10Y(I,J,3),I=1,7),J=1,4)/(0.6E0,-0.6E0), 00480 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00481 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00482 + (0.7E0,-0.8E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00483 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00484 + (0.0E0,0.0E0), (-0.1E0,-0.9E0), (0.7E0,-0.8E0), 00485 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00486 + (0.0E0,0.0E0), (0.0E0,0.0E0), (-0.6E0,0.6E0), 00487 + (-0.9E0,-0.4E0), (-0.1E0,-0.9E0), 00488 + (0.7E0,-0.8E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00489 + (0.0E0,0.0E0)/ 00490 DATA ((CT10Y(I,J,4),I=1,7),J=1,4)/(0.6E0,-0.6E0), 00491 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00492 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00493 + (0.7E0,-0.8E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00494 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00495 + (0.0E0,0.0E0), (0.7E0,-0.8E0), (-0.9E0,0.5E0), 00496 + (-0.4E0,-0.7E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00497 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.7E0,-0.8E0), 00498 + (-0.9E0,0.5E0), (-0.4E0,-0.7E0), (0.1E0,-0.5E0), 00499 + (-0.1E0,-0.9E0), (-0.5E0,-0.3E0), 00500 + (0.2E0,-0.8E0)/ 00501 DATA CSIZE1/(0.0E0,0.0E0), (0.9E0,0.9E0), 00502 + (1.63E0,1.73E0), (2.90E0,2.78E0)/ 00503 DATA CSIZE3/(0.0E0,0.0E0), (0.0E0,0.0E0), 00504 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00505 + (0.0E0,0.0E0), (0.0E0,0.0E0), (1.17E0,1.17E0), 00506 + (1.17E0,1.17E0), (1.17E0,1.17E0), 00507 + (1.17E0,1.17E0), (1.17E0,1.17E0), 00508 + (1.17E0,1.17E0), (1.17E0,1.17E0)/ 00509 DATA CSIZE2/(0.0E0,0.0E0), (0.0E0,0.0E0), 00510 + (0.0E0,0.0E0), (0.0E0,0.0E0), (0.0E0,0.0E0), 00511 + (0.0E0,0.0E0), (0.0E0,0.0E0), (1.54E0,1.54E0), 00512 + (1.54E0,1.54E0), (1.54E0,1.54E0), 00513 + (1.54E0,1.54E0), (1.54E0,1.54E0), 00514 + (1.54E0,1.54E0), (1.54E0,1.54E0)/ 00515 * .. Executable Statements .. 00516 DO 60 KI = 1, 4 00517 INCX = INCXS(KI) 00518 INCY = INCYS(KI) 00519 MX = ABS(INCX) 00520 MY = ABS(INCY) 00521 * 00522 DO 40 KN = 1, 4 00523 N = NS(KN) 00524 KSIZE = MIN(2,KN) 00525 LENX = LENS(KN,MX) 00526 LENY = LENS(KN,MY) 00527 * .. initialize all argument arrays .. 00528 DO 20 I = 1, 7 00529 CX(I) = CX1(I) 00530 CY(I) = CY1(I) 00531 20 CONTINUE 00532 IF (ICASE.EQ.1) THEN 00533 * .. CDOTC .. 00534 CDOT(1) = CDOTC(N,CX,INCX,CY,INCY) 00535 CALL CTEST(1,CDOT,CT6(KN,KI),CSIZE1(KN),SFAC) 00536 ELSE IF (ICASE.EQ.2) THEN 00537 * .. CDOTU .. 00538 CDOT(1) = CDOTU(N,CX,INCX,CY,INCY) 00539 CALL CTEST(1,CDOT,CT7(KN,KI),CSIZE1(KN),SFAC) 00540 ELSE IF (ICASE.EQ.3) THEN 00541 * .. CAXPY .. 00542 CALL CAXPY(N,CA,CX,INCX,CY,INCY) 00543 CALL CTEST(LENY,CY,CT8(1,KN,KI),CSIZE2(1,KSIZE),SFAC) 00544 ELSE IF (ICASE.EQ.4) THEN 00545 * .. CCOPY .. 00546 CALL CCOPY(N,CX,INCX,CY,INCY) 00547 CALL CTEST(LENY,CY,CT10Y(1,KN,KI),CSIZE3,1.0E0) 00548 ELSE IF (ICASE.EQ.5) THEN 00549 * .. CSWAP .. 00550 CALL CSWAP(N,CX,INCX,CY,INCY) 00551 CALL CTEST(LENX,CX,CT10X(1,KN,KI),CSIZE3,1.0E0) 00552 CALL CTEST(LENY,CY,CT10Y(1,KN,KI),CSIZE3,1.0E0) 00553 ELSE 00554 WRITE (NOUT,*) ' Shouldn''t be here in CHECK2' 00555 STOP 00556 END IF 00557 * 00558 40 CONTINUE 00559 60 CONTINUE 00560 RETURN 00561 END 00562 SUBROUTINE STEST(LEN,SCOMP,STRUE,SSIZE,SFAC) 00563 * ********************************* STEST ************************** 00564 * 00565 * THIS SUBR COMPARES ARRAYS SCOMP() AND STRUE() OF LENGTH LEN TO 00566 * SEE IF THE TERM BY TERM DIFFERENCES, MULTIPLIED BY SFAC, ARE 00567 * NEGLIGIBLE. 00568 * 00569 * C. L. LAWSON, JPL, 1974 DEC 10 00570 * 00571 * .. Parameters .. 00572 INTEGER NOUT 00573 PARAMETER (NOUT=6) 00574 * .. Scalar Arguments .. 00575 REAL SFAC 00576 INTEGER LEN 00577 * .. Array Arguments .. 00578 REAL SCOMP(LEN), SSIZE(LEN), STRUE(LEN) 00579 * .. Scalars in Common .. 00580 INTEGER ICASE, INCX, INCY, MODE, N 00581 LOGICAL PASS 00582 * .. Local Scalars .. 00583 REAL SD 00584 INTEGER I 00585 * .. External Functions .. 00586 REAL SDIFF 00587 EXTERNAL SDIFF 00588 * .. Intrinsic Functions .. 00589 INTRINSIC ABS 00590 * .. Common blocks .. 00591 COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS 00592 * .. Executable Statements .. 00593 * 00594 DO 40 I = 1, LEN 00595 SD = SCOMP(I) - STRUE(I) 00596 IF (SDIFF(ABS(SSIZE(I))+ABS(SFAC*SD),ABS(SSIZE(I))).EQ.0.0E0) 00597 + GO TO 40 00598 * 00599 * HERE SCOMP(I) IS NOT CLOSE TO STRUE(I). 00600 * 00601 IF ( .NOT. PASS) GO TO 20 00602 * PRINT FAIL MESSAGE AND HEADER. 00603 PASS = .FALSE. 00604 WRITE (NOUT,99999) 00605 WRITE (NOUT,99998) 00606 20 WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, I, SCOMP(I), 00607 + STRUE(I), SD, SSIZE(I) 00608 40 CONTINUE 00609 RETURN 00610 * 00611 99999 FORMAT (' FAIL') 00612 99998 FORMAT (/' CASE N INCX INCY MODE I ', 00613 + ' COMP(I) TRUE(I) DIFFERENCE', 00614 + ' SIZE(I)',/1X) 00615 99997 FORMAT (1X,I4,I3,3I5,I3,2E36.8,2E12.4) 00616 END 00617 SUBROUTINE STEST1(SCOMP1,STRUE1,SSIZE,SFAC) 00618 * ************************* STEST1 ***************************** 00619 * 00620 * THIS IS AN INTERFACE SUBROUTINE TO ACCOMODATE THE FORTRAN 00621 * REQUIREMENT THAT WHEN A DUMMY ARGUMENT IS AN ARRAY, THE 00622 * ACTUAL ARGUMENT MUST ALSO BE AN ARRAY OR AN ARRAY ELEMENT. 00623 * 00624 * C.L. LAWSON, JPL, 1978 DEC 6 00625 * 00626 * .. Scalar Arguments .. 00627 REAL SCOMP1, SFAC, STRUE1 00628 * .. Array Arguments .. 00629 REAL SSIZE(*) 00630 * .. Local Arrays .. 00631 REAL SCOMP(1), STRUE(1) 00632 * .. External Subroutines .. 00633 EXTERNAL STEST 00634 * .. Executable Statements .. 00635 * 00636 SCOMP(1) = SCOMP1 00637 STRUE(1) = STRUE1 00638 CALL STEST(1,SCOMP,STRUE,SSIZE,SFAC) 00639 * 00640 RETURN 00641 END 00642 REAL FUNCTION SDIFF(SA,SB) 00643 * ********************************* SDIFF ************************** 00644 * COMPUTES DIFFERENCE OF TWO NUMBERS. C. L. LAWSON, JPL 1974 FEB 15 00645 * 00646 * .. Scalar Arguments .. 00647 REAL SA, SB 00648 * .. Executable Statements .. 00649 SDIFF = SA - SB 00650 RETURN 00651 END 00652 SUBROUTINE CTEST(LEN,CCOMP,CTRUE,CSIZE,SFAC) 00653 * **************************** CTEST ***************************** 00654 * 00655 * C.L. LAWSON, JPL, 1978 DEC 6 00656 * 00657 * .. Scalar Arguments .. 00658 REAL SFAC 00659 INTEGER LEN 00660 * .. Array Arguments .. 00661 COMPLEX CCOMP(LEN), CSIZE(LEN), CTRUE(LEN) 00662 * .. Local Scalars .. 00663 INTEGER I 00664 * .. Local Arrays .. 00665 REAL SCOMP(20), SSIZE(20), STRUE(20) 00666 * .. External Subroutines .. 00667 EXTERNAL STEST 00668 * .. Intrinsic Functions .. 00669 INTRINSIC AIMAG, REAL 00670 * .. Executable Statements .. 00671 DO 20 I = 1, LEN 00672 SCOMP(2*I-1) = REAL(CCOMP(I)) 00673 SCOMP(2*I) = AIMAG(CCOMP(I)) 00674 STRUE(2*I-1) = REAL(CTRUE(I)) 00675 STRUE(2*I) = AIMAG(CTRUE(I)) 00676 SSIZE(2*I-1) = REAL(CSIZE(I)) 00677 SSIZE(2*I) = AIMAG(CSIZE(I)) 00678 20 CONTINUE 00679 * 00680 CALL STEST(2*LEN,SCOMP,STRUE,SSIZE,SFAC) 00681 RETURN 00682 END 00683 SUBROUTINE ITEST1(ICOMP,ITRUE) 00684 * ********************************* ITEST1 ************************* 00685 * 00686 * THIS SUBROUTINE COMPARES THE VARIABLES ICOMP AND ITRUE FOR 00687 * EQUALITY. 00688 * C. L. LAWSON, JPL, 1974 DEC 10 00689 * 00690 * .. Parameters .. 00691 INTEGER NOUT 00692 PARAMETER (NOUT=6) 00693 * .. Scalar Arguments .. 00694 INTEGER ICOMP, ITRUE 00695 * .. Scalars in Common .. 00696 INTEGER ICASE, INCX, INCY, MODE, N 00697 LOGICAL PASS 00698 * .. Local Scalars .. 00699 INTEGER ID 00700 * .. Common blocks .. 00701 COMMON /COMBLA/ICASE, N, INCX, INCY, MODE, PASS 00702 * .. Executable Statements .. 00703 IF (ICOMP.EQ.ITRUE) GO TO 40 00704 * 00705 * HERE ICOMP IS NOT EQUAL TO ITRUE. 00706 * 00707 IF ( .NOT. PASS) GO TO 20 00708 * PRINT FAIL MESSAGE AND HEADER. 00709 PASS = .FALSE. 00710 WRITE (NOUT,99999) 00711 WRITE (NOUT,99998) 00712 20 ID = ICOMP - ITRUE 00713 WRITE (NOUT,99997) ICASE, N, INCX, INCY, MODE, ICOMP, ITRUE, ID 00714 40 CONTINUE 00715 RETURN 00716 * 00717 99999 FORMAT (' FAIL') 00718 99998 FORMAT (/' CASE N INCX INCY MODE ', 00719 + ' COMP TRUE DIFFERENCE', 00720 + /1X) 00721 99997 FORMAT (1X,I4,I3,3I5,2I36,I12) 00722 END