File:  [local] / rpl / lapack / lapack / dlatzm.f
Revision 1.18: download - view: text, annotated - select for diffs - revision graph
Mon Aug 7 08:39:01 2023 UTC (9 months ago) by bertrand
Branches: MAIN
CVS tags: rpl-4_1_35, rpl-4_1_34, HEAD
Première mise à jour de lapack et blas.

    1: *> \brief \b DLATZM
    2: *
    3: *  =========== DOCUMENTATION ===========
    4: *
    5: * Online html documentation available at
    6: *            http://www.netlib.org/lapack/explore-html/
    7: *
    8: *> \htmlonly
    9: *> Download DLATZM + dependencies
   10: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlatzm.f">
   11: *> [TGZ]</a>
   12: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlatzm.f">
   13: *> [ZIP]</a>
   14: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlatzm.f">
   15: *> [TXT]</a>
   16: *> \endhtmlonly
   17: *
   18: *  Definition:
   19: *  ===========
   20: *
   21: *       SUBROUTINE DLATZM( SIDE, M, N, V, INCV, TAU, C1, C2, LDC, WORK )
   22: *
   23: *       .. Scalar Arguments ..
   24: *       CHARACTER          SIDE
   25: *       INTEGER            INCV, LDC, M, N
   26: *       DOUBLE PRECISION   TAU
   27: *       ..
   28: *       .. Array Arguments ..
   29: *       DOUBLE PRECISION   C1( LDC, * ), C2( LDC, * ), V( * ), WORK( * )
   30: *       ..
   31: *
   32: *
   33: *> \par Purpose:
   34: *  =============
   35: *>
   36: *> \verbatim
   37: *>
   38: *> This routine is deprecated and has been replaced by routine DORMRZ.
   39: *>
   40: *> DLATZM applies a Householder matrix generated by DTZRQF to a matrix.
   41: *>
   42: *> Let P = I - tau*u*u**T,   u = ( 1 ),
   43: *>                               ( v )
   44: *> where v is an (m-1) vector if SIDE = 'L', or a (n-1) vector if
   45: *> SIDE = 'R'.
   46: *>
   47: *> If SIDE equals 'L', let
   48: *>        C = [ C1 ] 1
   49: *>            [ C2 ] m-1
   50: *>              n
   51: *> Then C is overwritten by P*C.
   52: *>
   53: *> If SIDE equals 'R', let
   54: *>        C = [ C1, C2 ] m
   55: *>               1  n-1
   56: *> Then C is overwritten by C*P.
   57: *> \endverbatim
   58: *
   59: *  Arguments:
   60: *  ==========
   61: *
   62: *> \param[in] SIDE
   63: *> \verbatim
   64: *>          SIDE is CHARACTER*1
   65: *>          = 'L': form P * C
   66: *>          = 'R': form C * P
   67: *> \endverbatim
   68: *>
   69: *> \param[in] M
   70: *> \verbatim
   71: *>          M is INTEGER
   72: *>          The number of rows of the matrix C.
   73: *> \endverbatim
   74: *>
   75: *> \param[in] N
   76: *> \verbatim
   77: *>          N is INTEGER
   78: *>          The number of columns of the matrix C.
   79: *> \endverbatim
   80: *>
   81: *> \param[in] V
   82: *> \verbatim
   83: *>          V is DOUBLE PRECISION array, dimension
   84: *>                  (1 + (M-1)*abs(INCV)) if SIDE = 'L'
   85: *>                  (1 + (N-1)*abs(INCV)) if SIDE = 'R'
   86: *>          The vector v in the representation of P. V is not used
   87: *>          if TAU = 0.
   88: *> \endverbatim
   89: *>
   90: *> \param[in] INCV
   91: *> \verbatim
   92: *>          INCV is INTEGER
   93: *>          The increment between elements of v. INCV <> 0
   94: *> \endverbatim
   95: *>
   96: *> \param[in] TAU
   97: *> \verbatim
   98: *>          TAU is DOUBLE PRECISION
   99: *>          The value tau in the representation of P.
  100: *> \endverbatim
  101: *>
  102: *> \param[in,out] C1
  103: *> \verbatim
  104: *>          C1 is DOUBLE PRECISION array, dimension
  105: *>                         (LDC,N) if SIDE = 'L'
  106: *>                         (M,1)   if SIDE = 'R'
  107: *>          On entry, the n-vector C1 if SIDE = 'L', or the m-vector C1
  108: *>          if SIDE = 'R'.
  109: *>
  110: *>          On exit, the first row of P*C if SIDE = 'L', or the first
  111: *>          column of C*P if SIDE = 'R'.
  112: *> \endverbatim
  113: *>
  114: *> \param[in,out] C2
  115: *> \verbatim
  116: *>          C2 is DOUBLE PRECISION array, dimension
  117: *>                         (LDC, N)   if SIDE = 'L'
  118: *>                         (LDC, N-1) if SIDE = 'R'
  119: *>          On entry, the (m - 1) x n matrix C2 if SIDE = 'L', or the
  120: *>          m x (n - 1) matrix C2 if SIDE = 'R'.
  121: *>
  122: *>          On exit, rows 2:m of P*C if SIDE = 'L', or columns 2:m of C*P
  123: *>          if SIDE = 'R'.
  124: *> \endverbatim
  125: *>
  126: *> \param[in] LDC
  127: *> \verbatim
  128: *>          LDC is INTEGER
  129: *>          The leading dimension of the arrays C1 and C2. LDC >= (1,M).
  130: *> \endverbatim
  131: *>
  132: *> \param[out] WORK
  133: *> \verbatim
  134: *>          WORK is DOUBLE PRECISION array, dimension
  135: *>                      (N) if SIDE = 'L'
  136: *>                      (M) if SIDE = 'R'
  137: *> \endverbatim
  138: *
  139: *  Authors:
  140: *  ========
  141: *
  142: *> \author Univ. of Tennessee
  143: *> \author Univ. of California Berkeley
  144: *> \author Univ. of Colorado Denver
  145: *> \author NAG Ltd.
  146: *
  147: *> \ingroup doubleOTHERcomputational
  148: *
  149: *  =====================================================================
  150:       SUBROUTINE DLATZM( SIDE, M, N, V, INCV, TAU, C1, C2, LDC, WORK )
  151: *
  152: *  -- LAPACK computational routine --
  153: *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
  154: *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  155: *
  156: *     .. Scalar Arguments ..
  157:       CHARACTER          SIDE
  158:       INTEGER            INCV, LDC, M, N
  159:       DOUBLE PRECISION   TAU
  160: *     ..
  161: *     .. Array Arguments ..
  162:       DOUBLE PRECISION   C1( LDC, * ), C2( LDC, * ), V( * ), WORK( * )
  163: *     ..
  164: *
  165: *  =====================================================================
  166: *
  167: *     .. Parameters ..
  168:       DOUBLE PRECISION   ONE, ZERO
  169:       PARAMETER          ( ONE = 1.0D+0, ZERO = 0.0D+0 )
  170: *     ..
  171: *     .. External Subroutines ..
  172:       EXTERNAL           DAXPY, DCOPY, DGEMV, DGER
  173: *     ..
  174: *     .. External Functions ..
  175:       LOGICAL            LSAME
  176:       EXTERNAL           LSAME
  177: *     ..
  178: *     .. Intrinsic Functions ..
  179:       INTRINSIC          MIN
  180: *     ..
  181: *     .. Executable Statements ..
  182: *
  183:       IF( ( MIN( M, N ).EQ.0 ) .OR. ( TAU.EQ.ZERO ) )
  184:      $   RETURN
  185: *
  186:       IF( LSAME( SIDE, 'L' ) ) THEN
  187: *
  188: *        w :=  (C1 + v**T * C2)**T
  189: *
  190:          CALL DCOPY( N, C1, LDC, WORK, 1 )
  191:          CALL DGEMV( 'Transpose', M-1, N, ONE, C2, LDC, V, INCV, ONE,
  192:      $               WORK, 1 )
  193: *
  194: *        [ C1 ] := [ C1 ] - tau* [ 1 ] * w**T
  195: *        [ C2 ]    [ C2 ]        [ v ]
  196: *
  197:          CALL DAXPY( N, -TAU, WORK, 1, C1, LDC )
  198:          CALL DGER( M-1, N, -TAU, V, INCV, WORK, 1, C2, LDC )
  199: *
  200:       ELSE IF( LSAME( SIDE, 'R' ) ) THEN
  201: *
  202: *        w := C1 + C2 * v
  203: *
  204:          CALL DCOPY( M, C1, 1, WORK, 1 )
  205:          CALL DGEMV( 'No transpose', M, N-1, ONE, C2, LDC, V, INCV, ONE,
  206:      $               WORK, 1 )
  207: *
  208: *        [ C1, C2 ] := [ C1, C2 ] - tau* w * [ 1 , v**T]
  209: *
  210:          CALL DAXPY( M, -TAU, WORK, 1, C1, 1 )
  211:          CALL DGER( M, N-1, -TAU, WORK, 1, V, INCV, C2, LDC )
  212:       END IF
  213: *
  214:       RETURN
  215: *
  216: *     End of DLATZM
  217: *
  218:       END

CVSweb interface <joel.bertrand@systella.fr>