LAPACK 3.12.0
LAPACK: Linear Algebra PACKage
Loading...
Searching...
No Matches

◆ cmvch()

subroutine cmvch ( character*1  trans,
integer  m,
integer  n,
complex  alpha,
complex, dimension( nmax, * )  a,
integer  nmax,
complex, dimension( * )  x,
integer  incx,
complex  beta,
complex, dimension( * )  y,
integer  incy,
complex, dimension( * )  yt,
real, dimension( * )  g,
complex, dimension( * )  yy,
real  eps,
real  err,
logical  fatal,
integer  nout,
logical  mv 
)

Definition at line 2934 of file cblat2.f.

2936*
2937* Checks the results of the computational tests.
2938*
2939* Auxiliary routine for test program for Level 2 Blas.
2940*
2941* -- Written on 10-August-1987.
2942* Richard Hanson, Sandia National Labs.
2943* Jeremy Du Croz, NAG Central Office.
2944*
2945* .. Parameters ..
2946 COMPLEX ZERO
2947 parameter( zero = ( 0.0, 0.0 ) )
2948 REAL RZERO, RONE
2949 parameter( rzero = 0.0, rone = 1.0 )
2950* .. Scalar Arguments ..
2951 COMPLEX ALPHA, BETA
2952 REAL EPS, ERR
2953 INTEGER INCX, INCY, M, N, NMAX, NOUT
2954 LOGICAL FATAL, MV
2955 CHARACTER*1 TRANS
2956* .. Array Arguments ..
2957 COMPLEX A( NMAX, * ), X( * ), Y( * ), YT( * ), YY( * )
2958 REAL G( * )
2959* .. Local Scalars ..
2960 COMPLEX C
2961 REAL ERRI
2962 INTEGER I, INCXL, INCYL, IY, J, JX, KX, KY, ML, NL
2963 LOGICAL CTRAN, TRAN
2964* .. Intrinsic Functions ..
2965 INTRINSIC abs, aimag, conjg, max, real, sqrt
2966* .. Statement Functions ..
2967 REAL ABS1
2968* .. Statement Function definitions ..
2969 abs1( c ) = abs( real( c ) ) + abs( aimag( c ) )
2970* .. Executable Statements ..
2971 tran = trans.EQ.'T'
2972 ctran = trans.EQ.'C'
2973 IF( tran.OR.ctran )THEN
2974 ml = n
2975 nl = m
2976 ELSE
2977 ml = m
2978 nl = n
2979 END IF
2980 IF( incx.LT.0 )THEN
2981 kx = nl
2982 incxl = -1
2983 ELSE
2984 kx = 1
2985 incxl = 1
2986 END IF
2987 IF( incy.LT.0 )THEN
2988 ky = ml
2989 incyl = -1
2990 ELSE
2991 ky = 1
2992 incyl = 1
2993 END IF
2994*
2995* Compute expected result in YT using data in A, X and Y.
2996* Compute gauges in G.
2997*
2998 iy = ky
2999 DO 40 i = 1, ml
3000 yt( iy ) = zero
3001 g( iy ) = rzero
3002 jx = kx
3003 IF( tran )THEN
3004 DO 10 j = 1, nl
3005 yt( iy ) = yt( iy ) + a( j, i )*x( jx )
3006 g( iy ) = g( iy ) + abs1( a( j, i ) )*abs1( x( jx ) )
3007 jx = jx + incxl
3008 10 CONTINUE
3009 ELSE IF( ctran )THEN
3010 DO 20 j = 1, nl
3011 yt( iy ) = yt( iy ) + conjg( a( j, i ) )*x( jx )
3012 g( iy ) = g( iy ) + abs1( a( j, i ) )*abs1( x( jx ) )
3013 jx = jx + incxl
3014 20 CONTINUE
3015 ELSE
3016 DO 30 j = 1, nl
3017 yt( iy ) = yt( iy ) + a( i, j )*x( jx )
3018 g( iy ) = g( iy ) + abs1( a( i, j ) )*abs1( x( jx ) )
3019 jx = jx + incxl
3020 30 CONTINUE
3021 END IF
3022 yt( iy ) = alpha*yt( iy ) + beta*y( iy )
3023 g( iy ) = abs1( alpha )*g( iy ) + abs1( beta )*abs1( y( iy ) )
3024 iy = iy + incyl
3025 40 CONTINUE
3026*
3027* Compute the error ratio for this result.
3028*
3029 err = zero
3030 DO 50 i = 1, ml
3031 erri = abs( yt( i ) - yy( 1 + ( i - 1 )*abs( incy ) ) )/eps
3032 IF( g( i ).NE.rzero )
3033 $ erri = erri/g( i )
3034 err = max( err, erri )
3035 IF( err*sqrt( eps ).GE.rone )
3036 $ GO TO 60
3037 50 CONTINUE
3038* If the loop completes, all results are at least half accurate.
3039 GO TO 80
3040*
3041* Report fatal error.
3042*
3043 60 fatal = .true.
3044 WRITE( nout, fmt = 9999 )
3045 DO 70 i = 1, ml
3046 IF( mv )THEN
3047 WRITE( nout, fmt = 9998 )i, yt( i ),
3048 $ yy( 1 + ( i - 1 )*abs( incy ) )
3049 ELSE
3050 WRITE( nout, fmt = 9998 )i,
3051 $ yy( 1 + ( i - 1 )*abs( incy ) ), yt( i )
3052 END IF
3053 70 CONTINUE
3054*
3055 80 CONTINUE
3056 RETURN
3057*
3058 9999 FORMAT( ' ******* FATAL ERROR - COMPUTED RESULT IS LESS THAN HAL',
3059 $ 'F ACCURATE *******', /' EXPECTED RE',
3060 $ 'SULT COMPUTED RESULT' )
3061 9998 FORMAT( 1x, i7, 2( ' (', g15.6, ',', g15.6, ')' ) )
3062*
3063* End of CMVCH
3064*
Here is the caller graph for this function: