home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / lib / mathlib / libblas / src_original / icamax.f < prev    next >
Encoding:
Text File  |  1994-08-02  |  1.6 KB  |  66 lines

  1.       INTEGER          FUNCTION ICAMAX( N, CX, INCX )
  2. *
  3. *     finds the index of element having max. absolute value.
  4. *     jack dongarra, linpack, 3/11/78.
  5. *
  6. *     .. Scalar Arguments ..
  7.       INTEGER                           INCX, N
  8. *     ..
  9. *     .. Array Arguments ..
  10.       COMPLEX                           CX( 1 )
  11. *     ..
  12. *     .. Local Scalars ..
  13.       INTEGER                           I, IX
  14.       REAL                              SMAX
  15.       COMPLEX                           ZDUM
  16. *     ..
  17. *     .. Intrinsic Functions ..
  18.       INTRINSIC                         ABS, AIMAG, REAL
  19. *     ..
  20. *     .. Statement Functions ..
  21.       REAL                              CABS1
  22. *     ..
  23. *     .. Statement Function definitions ..
  24.       CABS1( ZDUM ) = ABS( REAL( ZDUM ) ) + ABS( AIMAG( ZDUM ) )
  25. *     ..
  26. *     .. Executable Statements ..
  27. *
  28.       ICAMAX = 0
  29.       IF( N.LT.1 )
  30.      $   RETURN
  31.       ICAMAX = 1
  32.       IF( N.EQ.1 )
  33.      $   RETURN
  34.       IF( INCX.EQ.1 )
  35.      $   GO TO 30
  36. *
  37. *        code for increment not equal to 1
  38. *
  39.       IX = 1
  40.       IF( INCX.LT.0 )
  41.      $   IX = 1 - ( N-1 )*INCX
  42.       SMAX = CABS1( CX( IX ) )
  43.       IX = IX + INCX
  44.       DO 20 I = 2, N
  45.          IF( CABS1( CX( IX ) ).LE.SMAX )
  46.      $      GO TO 10
  47.          ICAMAX = I
  48.          SMAX = CABS1( CX( IX ) )
  49.    10    IX = IX + INCX
  50.    20 CONTINUE
  51.       IF( INCX.LT.0 )
  52.      $   ICAMAX = N - ICAMAX + 1
  53.       RETURN
  54. *
  55. *        code for increment equal to 1
  56. *
  57.    30 SMAX = CABS1( CX( 1 ) )
  58.       DO 40 I = 2, N
  59.          IF( CABS1( CX( I ) ).LE.SMAX )
  60.      $      GO TO 40
  61.          ICAMAX = I
  62.          SMAX = CABS1( CX( I ) )
  63.    40 CONTINUE
  64.       RETURN
  65.       END
  66.