⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c_zblat2.f

📁 基本的C语言线性代数函数库,在linux下可直接编译;在windows下要显示地申明包含
💻 F
📖 第 1 页 / 共 5 页
字号:
*           Test ZTRMV, 06, ZTBMV, 07, ZTPMV, 08,*           ZTRSV, 09, ZTBSV, 10, and ZTPSV, 11.  160      IF (CORDER) THEN           CALL ZCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,     $                  REWI, FATAL, NIDIM, IDIM, NKB, KB, NINC, INC,     $                  NMAX, INCMAX, A, AA, AS, Y, YY, YS, YT, G, Z,      $			0 )           END IF           IF (RORDER) THEN           CALL ZCHK3( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,     $                  REWI, FATAL, NIDIM, IDIM, NKB, KB, NINC, INC,     $                  NMAX, INCMAX, A, AA, AS, Y, YY, YS, YT, G, Z,      $			1 )           END IF            GO TO 200*           Test ZGERC, 12, ZGERU, 13.  170      IF (CORDER) THEN           CALL ZCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,     $                  REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC,     $                  NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS,     $                  YT, G, Z, 0 )           END IF           IF (RORDER) THEN           CALL ZCHK4( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,     $                  REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC,     $                  NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS,     $                  YT, G, Z, 1 )           END IF            GO TO 200*           Test ZHER, 14, and ZHPR, 15.  180      IF (CORDER) THEN           CALL ZCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,     $                  REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC,     $                  NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS,     $                  YT, G, Z, 0 )           END IF           IF (RORDER) THEN           CALL ZCHK5( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,     $                  REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC,     $                  NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS,     $                  YT, G, Z, 1 )           END IF            GO TO 200*           Test ZHER2, 16, and ZHPR2, 17.  190      IF (CORDER) THEN           CALL ZCHK6( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,     $                  REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC,     $                  NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS,     $                  YT, G, Z, 0 )           END IF           IF (RORDER) THEN           CALL ZCHK6( SNAMES( ISNUM ), EPS, THRESH, NOUT, NTRA, TRACE,     $                  REWI, FATAL, NIDIM, IDIM, NALF, ALF, NINC, INC,     $                  NMAX, INCMAX, A, AA, AS, X, XX, XS, Y, YY, YS,     $                  YT, G, Z, 1 )           END IF*  200       IF( FATAL.AND.SFATAL )     $         GO TO 220         END IF  210 CONTINUE      WRITE( NOUT, FMT = 9982 )      GO TO 240*  220 CONTINUE      WRITE( NOUT, FMT = 9981 )      GO TO 240*  230 CONTINUE      WRITE( NOUT, FMT = 9987 )*  240 CONTINUE      IF( TRACE )     $   CLOSE ( NTRA )      CLOSE ( NOUT )      STOP*10002 FORMAT( ' COLUMN-MAJOR AND ROW-MAJOR DATA LAYOUTS ARE TESTED' )10001 FORMAT( ' ROW-MAJOR DATA LAYOUT IS TESTED' )10000 FORMAT( ' COLUMN-MAJOR DATA LAYOUT IS TESTED' ) 9999 FORMAT(' ROUTINES PASS COMPUTATIONAL TESTS IF TEST RATIO IS LES',     $      'S THAN', F8.2 ) 9998 FORMAT( ' RELATIVE MACHINE PRECISION IS TAKEN TO BE', 1P, E9.1 ) 9997 FORMAT(' NUMBER OF VALUES OF ', A, ' IS LESS THAN 1 OR GREATER ',     $      'THAN ', I2 ) 9996 FORMAT( ' VALUE OF N IS LESS THAN 0 OR GREATER THAN ', I2 ) 9995 FORMAT( ' VALUE OF K IS LESS THAN 0' ) 9994 FORMAT( ' ABSOLUTE VALUE OF INCX OR INCY IS 0 OR GREATER THAN ',     $      I2 ) 9993 FORMAT(' TESTS OF THE COMPLEX*16      LEVEL 2 BLAS', //' THE F',     $      'OLLOWING PARAMETER VALUES WILL BE USED:' ) 9992 FORMAT( '   FOR N              ', 9I6 ) 9991 FORMAT( '   FOR K              ', 7I6 ) 9990 FORMAT( '   FOR INCX AND INCY  ', 7I6 ) 9989 FORMAT( '   FOR ALPHA          ',     $      7('(', F4.1, ',', F4.1, ')  ', : ) ) 9988 FORMAT( '   FOR BETA           ',     $      7('(', F4.1, ',', F4.1, ')  ', : ) ) 9987 FORMAT( ' AMEND DATA FILE OR INCREASE ARRAY SIZES IN PROGRAM',     $      /' ******* TESTS ABANDONED *******' ) 9986 FORMAT(' SUBPROGRAM NAME ',A12, ' NOT RECOGNIZED', /' ******* T',     $      'ESTS ABANDONED *******' ) 9985 FORMAT(' ERROR IN CMVCH -  IN-LINE DOT PRODUCTS ARE BEING EVALU',     $      'ATED WRONGLY.', /' CMVCH WAS CALLED WITH TRANS = ', A1,     $      ' AND RETURNED SAME = ', L1, ' AND ERR = ', F12.3, '.', /     $  ' THIS MAY BE DUE TO FAULTS IN THE ARITHMETIC OR THE COMPILER.'     $      , /' ******* TESTS ABANDONED *******' ) 9984 FORMAT( A12, L2 ) 9983 FORMAT( 1X,A12, ' WAS NOT TESTED' ) 9982 FORMAT( /' END OF TESTS' ) 9981 FORMAT( /' ******* FATAL ERROR - TESTS ABANDONED *******' ) 9980 FORMAT( ' ERROR-EXITS WILL NOT BE TESTED' )**     End of ZBLAT2.*      END      SUBROUTINE ZCHK1( SNAME, EPS, THRESH, NOUT, NTRA, TRACE, REWI,     $                  FATAL, NIDIM, IDIM, NKB, KB, NALF, ALF, NBET,     $                  BET, NINC, INC, NMAX, INCMAX, A, AA, AS, X, XX,     $                  XS, Y, YY, YS, YT, G, IORDER )**  Tests CGEMV and CGBMV.**  Auxiliary routine for test program for Level 2 Blas.**  -- Written on 10-August-1987.*     Richard Hanson, Sandia National Labs.*     Jeremy Du Croz, NAG Central Office.**     .. Parameters ..      COMPLEX*16        ZERO, HALF      PARAMETER         ( ZERO = ( 0.0D0, 0.0D0 ),      $                  HALF = ( 0.5D0, 0.0D0 ) )      DOUBLE PRECISION  RZERO      PARAMETER         ( RZERO = 0.0D0 )*     .. Scalar Arguments ..      DOUBLE PRECISION   EPS, THRESH      INTEGER            INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX,     $                   NOUT, NTRA, IORDER      LOGICAL            FATAL, REWI, TRACE      CHARACTER*12       SNAME*     .. Array Arguments ..      COMPLEX*16         A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),     $                   AS( NMAX*NMAX ), BET( NBET ), X( NMAX ),     $                   XS( NMAX*INCMAX ), XX( NMAX*INCMAX ),     $                   Y( NMAX ), YS( NMAX*INCMAX ), YT( NMAX ),     $                   YY( NMAX*INCMAX )      DOUBLE PRECISION   G( NMAX )      INTEGER            IDIM( NIDIM ), INC( NINC ), KB( NKB )*     .. Local Scalars ..      COMPLEX*16         ALPHA, ALS, BETA, BLS, TRANSL      DOUBLE PRECISION   ERR, ERRMAX      INTEGER            I, IA, IB, IC, IKU, IM, IN, INCX, INCXS, INCY,     $                   INCYS, IX, IY, KL, KLS, KU, KUS, LAA, LDA,     $                   LDAS, LX, LY, M, ML, MS, N, NARGS, NC, ND, NK,     $                   NL, NS      LOGICAL            BANDED, FULL, NULL, RESET, SAME, TRAN      CHARACTER*1        TRANS, TRANSS      CHARACTER*14       CTRANS      CHARACTER*3        ICH*     .. Local Arrays ..      LOGICAL            ISAME( 13 )*     .. External Functions ..      LOGICAL            LZE, LZERES      EXTERNAL           LZE, LZERES*     .. External Subroutines ..      EXTERNAL           CZGBMV, CZGEMV, ZMAKE, ZMVCH*     .. Intrinsic Functions ..      INTRINSIC          ABS, MAX, MIN*     .. Scalars in Common ..      INTEGER            INFOT, NOUTC      LOGICAL             OK*     .. Common blocks ..      COMMON             /INFOC/INFOT, NOUTC, OK*     .. Data statements ..      DATA               ICH/'NTC'/*     .. Executable Statements ..      FULL = SNAME( 9: 9 ).EQ.'e'      BANDED = SNAME( 9: 9 ).EQ.'b'*     Define the number of arguments.      IF( FULL )THEN         NARGS = 11      ELSE IF( BANDED )THEN         NARGS = 13      END IF*      NC = 0      RESET = .TRUE.      ERRMAX = RZERO*      DO 120 IN = 1, NIDIM         N = IDIM( IN )         ND = N/2 + 1*         DO 110 IM = 1, 2            IF( IM.EQ.1 )     $         M = MAX( N - ND, 0 )            IF( IM.EQ.2 )     $         M = MIN( N + ND, NMAX )*            IF( BANDED )THEN               NK = NKB            ELSE               NK = 1            END IF            DO 100 IKU = 1, NK               IF( BANDED )THEN                  KU = KB( IKU )                  KL = MAX( KU - 1, 0 )               ELSE                  KU = N - 1                  KL = M - 1               END IF*              Set LDA to 1 more than minimum value if room.               IF( BANDED )THEN                  LDA = KL + KU + 1               ELSE                  LDA = M               END IF               IF( LDA.LT.NMAX )     $            LDA = LDA + 1*              Skip tests if not enough room.               IF( LDA.GT.NMAX )     $            GO TO 100               LAA = LDA*N               NULL = N.LE.0.OR.M.LE.0**              Generate the matrix A.*               TRANSL = ZERO               CALL ZMAKE( SNAME( 8: 9 ), ' ', ' ', M, N, A, NMAX, AA,     $                     LDA, KL, KU, RESET, TRANSL )*               DO 90 IC = 1, 3                  TRANS = ICH( IC: IC )                  IF (TRANS.EQ.'N')THEN                     CTRANS = '  CblasNoTrans'                  ELSE IF (TRANS.EQ.'T')THEN                     CTRANS = '    CblasTrans'                  ELSE                      CTRANS = 'CblasConjTrans'                  END IF                  TRAN = TRANS.EQ.'T'.OR.TRANS.EQ.'C'*                  IF( TRAN )THEN                     ML = N                     NL = M                  ELSE                     ML = M                     NL = N                  END IF*                  DO 80 IX = 1, NINC                     INCX = INC( IX )                     LX = ABS( INCX )*NL**                    Generate the vector X.*                     TRANSL = HALF                     CALL ZMAKE( 'ge', ' ', ' ', 1, NL, X, 1, XX,     $                          ABS( INCX ), 0, NL - 1, RESET, TRANSL )                     IF( NL.GT.1 )THEN                        X( NL/2 ) = ZERO                        XX( 1 + ABS( INCX )*( NL/2 - 1 ) ) = ZERO                     END IF*                     DO 70 IY = 1, NINC                        INCY = INC( IY )                        LY = ABS( INCY )*ML*                        DO 60 IA = 1, NALF                           ALPHA = ALF( IA )*                           DO 50 IB = 1, NBET                              BETA = BET( IB )**                             Generate the vector Y.*                              TRANSL = ZERO                              CALL ZMAKE( 'ge', ' ', ' ', 1, ML, Y, 1,     $                                    YY, ABS( INCY ), 0, ML - 1,     $                                    RESET, TRANSL )*                              NC = NC + 1**                             Save every datum before calling the*                             subroutine.*                              TRANSS = TRANS                              MS = M                              NS = N                              KLS = KL                              KUS = KU                              ALS = ALPHA                              DO 10 I = 1, LAA                                 AS( I ) = AA( I )   10                         CONTINUE                              LDAS = LDA                              DO 20 I = 1, LX                                 XS( I ) = XX( I )   20                         CONTINUE                              INCXS = INCX                              BLS = BETA                              DO 30 I = 1, LY                                 YS( I ) = YY( I )   30                         CONTINUE                              INCYS = INCY**                             Call the subroutine.*                              IF( FULL )THEN                                 IF( TRACE )     $                              WRITE( NTRA, FMT = 9994 )NC, SNAME,     $                             CTRANS, M, N, ALPHA, LDA, INCX, BETA,     $                              INCY                                 IF( REWI )     $                              REWIND NTRA                                 CALL CZGEMV( IORDER, TRANS, M, N,     $                                      ALPHA, AA, LDA, XX, INCX,     $                                      BETA, YY, INCY )                              ELSE IF( BANDED )THEN                                 IF( TRACE )     $                              WRITE( NTRA, FMT = 9995 )NC, SNAME,     $                              CTRANS, M, N, KL, KU, ALPHA, LDA,     $                              INCX, BETA, INCY                                 IF( REWI )     $                              REWIND NTRA                                 CALL CZGBMV( IORDER, TRANS, M, N, KL,     $                                       KU, ALPHA, AA, LDA, XX,     $                                       INCX, BETA, YY, INCY )                              END IF**                            Check if error-exit was taken incorrectly.*                              IF( .NOT.OK )THEN                                 WRITE( NOUT, FMT = 9993 )                                 FATAL = .TRUE.                                 GO TO 130                              END IF**                             See what data changed inside subroutines.**        IF(TRANS .NE. 'C' .OR. (INCX .GT. 0 .AND. INCY .GT. 0)) THEN                               ISAME( 1 ) = TRANS.EQ.TRANSS                              ISAME( 2 ) = MS.EQ.M

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -