LAPACK  3.10.1
LAPACK: Linear Algebra PACKage

◆ zmvch()

subroutine zmvch ( character*1  TRANS,
integer  M,
integer  N,
complex*16  ALPHA,
complex*16, dimension( nmax, * )  A,
integer  NMAX,
complex*16, dimension( * )  X,
integer  INCX,
complex*16  BETA,
complex*16, dimension( * )  Y,
integer  INCY,
complex*16, dimension( * )  YT,
double precision, dimension( * )  G,
complex*16, dimension( * )  YY,
double precision  EPS,
double precision  ERR,
logical  FATAL,
integer  NOUT,
logical  MV 
)

Definition at line 2914 of file zblat2.f.

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