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.

dlarfy.f 4.0 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. *> \brief \b DLARFY
  2. *
  3. * =========== DOCUMENTATION ===========
  4. *
  5. * Online html documentation available at
  6. * http://www.netlib.org/lapack/explore-html/
  7. *
  8. * Definition:
  9. * ===========
  10. *
  11. * SUBROUTINE DLARFY( UPLO, N, V, INCV, TAU, C, LDC, WORK )
  12. *
  13. * .. Scalar Arguments ..
  14. * CHARACTER UPLO
  15. * INTEGER INCV, LDC, N
  16. * DOUBLE PRECISION TAU
  17. * ..
  18. * .. Array Arguments ..
  19. * DOUBLE PRECISION C( LDC, * ), V( * ), WORK( * )
  20. * ..
  21. *
  22. *
  23. *> \par Purpose:
  24. * =============
  25. *>
  26. *> \verbatim
  27. *>
  28. *> DLARFY applies an elementary reflector, or Householder matrix, H,
  29. *> to an n x n symmetric matrix C, from both the left and the right.
  30. *>
  31. *> H is represented in the form
  32. *>
  33. *> H = I - tau * v * v'
  34. *>
  35. *> where tau is a scalar and v is a vector.
  36. *>
  37. *> If tau is zero, then H is taken to be the unit matrix.
  38. *> \endverbatim
  39. *
  40. * Arguments:
  41. * ==========
  42. *
  43. *> \param[in] UPLO
  44. *> \verbatim
  45. *> UPLO is CHARACTER*1
  46. *> Specifies whether the upper or lower triangular part of the
  47. *> symmetric matrix C is stored.
  48. *> = 'U': Upper triangle
  49. *> = 'L': Lower triangle
  50. *> \endverbatim
  51. *>
  52. *> \param[in] N
  53. *> \verbatim
  54. *> N is INTEGER
  55. *> The number of rows and columns of the matrix C. N >= 0.
  56. *> \endverbatim
  57. *>
  58. *> \param[in] V
  59. *> \verbatim
  60. *> V is DOUBLE PRECISION array, dimension
  61. *> (1 + (N-1)*abs(INCV))
  62. *> The vector v as described above.
  63. *> \endverbatim
  64. *>
  65. *> \param[in] INCV
  66. *> \verbatim
  67. *> INCV is INTEGER
  68. *> The increment between successive elements of v. INCV must
  69. *> not be zero.
  70. *> \endverbatim
  71. *>
  72. *> \param[in] TAU
  73. *> \verbatim
  74. *> TAU is DOUBLE PRECISION
  75. *> The value tau as described above.
  76. *> \endverbatim
  77. *>
  78. *> \param[in,out] C
  79. *> \verbatim
  80. *> C is DOUBLE PRECISION array, dimension (LDC, N)
  81. *> On entry, the matrix C.
  82. *> On exit, C is overwritten by H * C * H'.
  83. *> \endverbatim
  84. *>
  85. *> \param[in] LDC
  86. *> \verbatim
  87. *> LDC is INTEGER
  88. *> The leading dimension of the array C. LDC >= max( 1, N ).
  89. *> \endverbatim
  90. *>
  91. *> \param[out] WORK
  92. *> \verbatim
  93. *> WORK is DOUBLE PRECISION array, dimension (N)
  94. *> \endverbatim
  95. *
  96. * Authors:
  97. * ========
  98. *
  99. *> \author Univ. of Tennessee
  100. *> \author Univ. of California Berkeley
  101. *> \author Univ. of Colorado Denver
  102. *> \author NAG Ltd.
  103. *
  104. *> \date December 2016
  105. *
  106. *> \ingroup doubleOTHERauxiliary
  107. *
  108. * =====================================================================
  109. SUBROUTINE DLARFY( UPLO, N, V, INCV, TAU, C, LDC, WORK )
  110. *
  111. * -- LAPACK test routine (version 3.7.0) --
  112. * -- LAPACK is a software package provided by Univ. of Tennessee, --
  113. * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  114. * December 2016
  115. *
  116. * .. Scalar Arguments ..
  117. CHARACTER UPLO
  118. INTEGER INCV, LDC, N
  119. DOUBLE PRECISION TAU
  120. * ..
  121. * .. Array Arguments ..
  122. DOUBLE PRECISION C( LDC, * ), V( * ), WORK( * )
  123. * ..
  124. *
  125. * =====================================================================
  126. *
  127. * .. Parameters ..
  128. DOUBLE PRECISION ONE, ZERO, HALF
  129. PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0, HALF = 0.5D+0 )
  130. * ..
  131. * .. Local Scalars ..
  132. DOUBLE PRECISION ALPHA
  133. * ..
  134. * .. External Subroutines ..
  135. EXTERNAL DAXPY, DSYMV, DSYR2
  136. * ..
  137. * .. External Functions ..
  138. DOUBLE PRECISION DDOT
  139. EXTERNAL DDOT
  140. * ..
  141. * .. Executable Statements ..
  142. *
  143. IF( TAU.EQ.ZERO )
  144. $ RETURN
  145. *
  146. * Form w:= C * v
  147. *
  148. CALL DSYMV( UPLO, N, ONE, C, LDC, V, INCV, ZERO, WORK, 1 )
  149. *
  150. ALPHA = -HALF*TAU*DDOT( N, WORK, 1, V, INCV )
  151. CALL DAXPY( N, ALPHA, V, INCV, WORK, 1 )
  152. *
  153. * C := C - v * w' - w * v'
  154. *
  155. CALL DSYR2( UPLO, N, -TAU, V, INCV, WORK, 1, C, LDC )
  156. *
  157. RETURN
  158. *
  159. * End of DLARFY
  160. *
  161. END