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

📄 c_sblat2.f

📁 基本的C语言线性代数函数库,在linux下可直接编译;在windows下要显示地申明包含
💻 F
📖 第 1 页 / 共 5 页
字号:
*           STRSV, 09, STBSV, 10, and STPSV, 11.  160       IF (CORDER) THEN            CALL SCHK3( 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 SCHK3( 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 SGER, 12.  170       IF (CORDER) THEN            CALL SCHK4( 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 SCHK4( 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 SSYR, 13, and SSPR, 14.  180       IF (CORDER) THEN            CALL SCHK5( 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 SCHK5( 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 SSYR2, 15, and SSPR2, 16.  190       IF (CORDER) THEN            CALL SCHK6( 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 SCHK6( 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 REAL             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          ', 7F6.1 ) 9988 FORMAT( '   FOR BETA           ', 7F6.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 SMVCH -  IN-LINE DOT PRODUCTS ARE BEING EVALU',     $      'ATED WRONGLY.', /' SMVCH 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 SBLAT2.*      END      SUBROUTINE SCHK1( 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 SGEMV and SGBMV.**  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 ..      REAL               ZERO, HALF      PARAMETER          ( ZERO = 0.0, HALF = 0.5 )*     .. Scalar Arguments ..      REAL               EPS, THRESH      INTEGER            INCMAX, NALF, NBET, NIDIM, NINC, NKB, NMAX,     $                   NOUT, NTRA, IORDER      LOGICAL            FATAL, REWI, TRACE      CHARACTER*12       SNAME*     .. Array Arguments ..      REAL               A( NMAX, NMAX ), AA( NMAX*NMAX ), ALF( NALF ),     $                   AS( NMAX*NMAX ), BET( NBET ), G( NMAX ),     $                   X( NMAX ), XS( NMAX*INCMAX ),     $                   XX( NMAX*INCMAX ), Y( NMAX ),     $                   YS( NMAX*INCMAX ), YT( NMAX ),     $                   YY( NMAX*INCMAX )      INTEGER            IDIM( NIDIM ), INC( NINC ), KB( NKB )*     .. Local Scalars ..      REAL               ALPHA, ALS, BETA, BLS, ERR, ERRMAX, TRANSL      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            LSE, LSERES      EXTERNAL           LSE, LSERES*     .. External Subroutines ..      EXTERNAL           CSGBMV, CSGEMV, SMAKE, SMVCH*     .. 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 = ZERO*      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 SMAKE( 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 SMAKE( '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 SMAKE( '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 CSGEMV( 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 CSGBMV( 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.*                              ISAME( 1 ) = TRANS.EQ.TRANSS                              ISAME( 2 ) = MS.EQ.M                              ISAME( 3 ) = NS.EQ.N                              IF( FULL )THEN                                 ISAME( 4 ) = ALS.EQ.ALPHA                                 ISAME( 5 ) = LSE( AS, AA, LAA )                                 ISAME( 6 ) = LDAS.EQ.LDA

⌨️ 快捷键说明

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