You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

scnrm2.f 2.9 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. *> \brief \b SCNRM2
  2. *
  3. * =========== DOCUMENTATION ===========
  4. *
  5. * Online html documentation available at
  6. * http://www.netlib.org/lapack/explore-html/
  7. *
  8. * Definition:
  9. * ===========
  10. *
  11. * REAL FUNCTION SCNRM2(N,X,INCX)
  12. *
  13. * .. Scalar Arguments ..
  14. * INTEGER INCX,N
  15. * ..
  16. * .. Array Arguments ..
  17. * COMPLEX X(*)
  18. * ..
  19. *
  20. *
  21. *> \par Purpose:
  22. * =============
  23. *>
  24. *> \verbatim
  25. *>
  26. *> SCNRM2 returns the euclidean norm of a vector via the function
  27. *> name, so that
  28. *>
  29. *> SCNRM2 := sqrt( x**H*x )
  30. *> \endverbatim
  31. *
  32. * Authors:
  33. * ========
  34. *
  35. *> \author Univ. of Tennessee
  36. *> \author Univ. of California Berkeley
  37. *> \author Univ. of Colorado Denver
  38. *> \author NAG Ltd.
  39. *
  40. *> \date November 2011
  41. *
  42. *> \ingroup single_blas_level1
  43. *
  44. *> \par Further Details:
  45. * =====================
  46. *>
  47. *> \verbatim
  48. *>
  49. *> -- This version written on 25-October-1982.
  50. *> Modified on 14-October-1993 to inline the call to CLASSQ.
  51. *> Sven Hammarling, Nag Ltd.
  52. *> \endverbatim
  53. *>
  54. * =====================================================================
  55. REAL FUNCTION SCNRM2(N,X,INCX)
  56. *
  57. * -- Reference BLAS level1 routine (version 3.4.0) --
  58. * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
  59. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  60. * November 2011
  61. *
  62. * .. Scalar Arguments ..
  63. INTEGER INCX,N
  64. * ..
  65. * .. Array Arguments ..
  66. COMPLEX X(*)
  67. * ..
  68. *
  69. * =====================================================================
  70. *
  71. * .. Parameters ..
  72. REAL ONE,ZERO
  73. PARAMETER (ONE=1.0E+0,ZERO=0.0E+0)
  74. * ..
  75. * .. Local Scalars ..
  76. REAL NORM,SCALE,SSQ,TEMP
  77. INTEGER IX
  78. * ..
  79. * .. Intrinsic Functions ..
  80. INTRINSIC ABS,AIMAG,REAL,SQRT
  81. * ..
  82. IF (N.LT.1 .OR. INCX.LT.1) THEN
  83. NORM = ZERO
  84. ELSE
  85. SCALE = ZERO
  86. SSQ = ONE
  87. * The following loop is equivalent to this call to the LAPACK
  88. * auxiliary routine:
  89. * CALL CLASSQ( N, X, INCX, SCALE, SSQ )
  90. *
  91. DO 10 IX = 1,1 + (N-1)*INCX,INCX
  92. IF (REAL(X(IX)).NE.ZERO) THEN
  93. TEMP = ABS(REAL(X(IX)))
  94. IF (SCALE.LT.TEMP) THEN
  95. SSQ = ONE + SSQ* (SCALE/TEMP)**2
  96. SCALE = TEMP
  97. ELSE
  98. SSQ = SSQ + (TEMP/SCALE)**2
  99. END IF
  100. END IF
  101. IF (AIMAG(X(IX)).NE.ZERO) THEN
  102. TEMP = ABS(AIMAG(X(IX)))
  103. IF (SCALE.LT.TEMP) THEN
  104. SSQ = ONE + SSQ* (SCALE/TEMP)**2
  105. SCALE = TEMP
  106. ELSE
  107. SSQ = SSQ + (TEMP/SCALE)**2
  108. END IF
  109. END IF
  110. 10 CONTINUE
  111. NORM = SCALE*SQRT(SSQ)
  112. END IF
  113. *
  114. SCNRM2 = NORM
  115. RETURN
  116. *
  117. * End of SCNRM2.
  118. *
  119. END