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 3.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  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. * Arguments:
  33. * ==========
  34. *
  35. *> \param[in] N
  36. *> \verbatim
  37. *> N is INTEGER
  38. *> number of elements in input vector(s)
  39. *> \endverbatim
  40. *>
  41. *> \param[in] X
  42. *> \verbatim
  43. *> X is COMPLEX array, dimension (N)
  44. *> complex vector with N elements
  45. *> \endverbatim
  46. *>
  47. *> \param[in] INCX
  48. *> \verbatim
  49. *> INCX is INTEGER
  50. *> storage spacing between elements of X
  51. *> \endverbatim
  52. *
  53. * Authors:
  54. * ========
  55. *
  56. *> \author Univ. of Tennessee
  57. *> \author Univ. of California Berkeley
  58. *> \author Univ. of Colorado Denver
  59. *> \author NAG Ltd.
  60. *
  61. *> \date November 2017
  62. *
  63. *> \ingroup single_blas_level1
  64. *
  65. *> \par Further Details:
  66. * =====================
  67. *>
  68. *> \verbatim
  69. *>
  70. *> -- This version written on 25-October-1982.
  71. *> Modified on 14-October-1993 to inline the call to CLASSQ.
  72. *> Sven Hammarling, Nag Ltd.
  73. *> \endverbatim
  74. *>
  75. * =====================================================================
  76. REAL FUNCTION SCNRM2(N,X,INCX)
  77. *
  78. * -- Reference BLAS level1 routine (version 3.8.0) --
  79. * -- Reference BLAS is a software package provided by Univ. of Tennessee, --
  80. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  81. * November 2017
  82. *
  83. * .. Scalar Arguments ..
  84. INTEGER INCX,N
  85. * ..
  86. * .. Array Arguments ..
  87. COMPLEX X(*)
  88. * ..
  89. *
  90. * =====================================================================
  91. *
  92. * .. Parameters ..
  93. REAL ONE,ZERO
  94. PARAMETER (ONE=1.0E+0,ZERO=0.0E+0)
  95. * ..
  96. * .. Local Scalars ..
  97. REAL NORM,SCALE,SSQ,TEMP
  98. INTEGER IX
  99. * ..
  100. * .. Intrinsic Functions ..
  101. INTRINSIC ABS,AIMAG,REAL,SQRT
  102. * ..
  103. IF (N.LT.1 .OR. INCX.LT.1) THEN
  104. NORM = ZERO
  105. ELSE
  106. SCALE = ZERO
  107. SSQ = ONE
  108. * The following loop is equivalent to this call to the LAPACK
  109. * auxiliary routine:
  110. * CALL CLASSQ( N, X, INCX, SCALE, SSQ )
  111. *
  112. DO 10 IX = 1,1 + (N-1)*INCX,INCX
  113. IF (REAL(X(IX)).NE.ZERO) THEN
  114. TEMP = ABS(REAL(X(IX)))
  115. IF (SCALE.LT.TEMP) THEN
  116. SSQ = ONE + SSQ* (SCALE/TEMP)**2
  117. SCALE = TEMP
  118. ELSE
  119. SSQ = SSQ + (TEMP/SCALE)**2
  120. END IF
  121. END IF
  122. IF (AIMAG(X(IX)).NE.ZERO) THEN
  123. TEMP = ABS(AIMAG(X(IX)))
  124. IF (SCALE.LT.TEMP) THEN
  125. SSQ = ONE + SSQ* (SCALE/TEMP)**2
  126. SCALE = TEMP
  127. ELSE
  128. SSQ = SSQ + (TEMP/SCALE)**2
  129. END IF
  130. END IF
  131. 10 CONTINUE
  132. NORM = SCALE*SQRT(SSQ)
  133. END IF
  134. *
  135. SCNRM2 = NORM
  136. RETURN
  137. *
  138. * End of SCNRM2.
  139. *
  140. END