File:  [local] / rpl / lapack / lapack / zlarfx.f
Revision 1.20: download - view: text, annotated - select for diffs - revision graph
Mon Aug 7 08:39:31 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 ZLARFX applies an elementary reflector to a general rectangular matrix, with loop unrolling when the reflector has order ≤ 10.
    2: *
    3: *  =========== DOCUMENTATION ===========
    4: *
    5: * Online html documentation available at
    6: *            http://www.netlib.org/lapack/explore-html/
    7: *
    8: *> \htmlonly
    9: *> Download ZLARFX + dependencies
   10: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlarfx.f">
   11: *> [TGZ]</a>
   12: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlarfx.f">
   13: *> [ZIP]</a>
   14: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlarfx.f">
   15: *> [TXT]</a>
   16: *> \endhtmlonly
   17: *
   18: *  Definition:
   19: *  ===========
   20: *
   21: *       SUBROUTINE ZLARFX( SIDE, M, N, V, TAU, C, LDC, WORK )
   22: *
   23: *       .. Scalar Arguments ..
   24: *       CHARACTER          SIDE
   25: *       INTEGER            LDC, M, N
   26: *       COMPLEX*16         TAU
   27: *       ..
   28: *       .. Array Arguments ..
   29: *       COMPLEX*16         C( LDC, * ), V( * ), WORK( * )
   30: *       ..
   31: *
   32: *
   33: *> \par Purpose:
   34: *  =============
   35: *>
   36: *> \verbatim
   37: *>
   38: *> ZLARFX applies a complex elementary reflector H to a complex m by n
   39: *> matrix C, from either the left or the right. H is represented in the
   40: *> form
   41: *>
   42: *>       H = I - tau * v * v**H
   43: *>
   44: *> where tau is a complex scalar and v is a complex vector.
   45: *>
   46: *> If tau = 0, then H is taken to be the unit matrix
   47: *>
   48: *> This version uses inline code if H has order < 11.
   49: *> \endverbatim
   50: *
   51: *  Arguments:
   52: *  ==========
   53: *
   54: *> \param[in] SIDE
   55: *> \verbatim
   56: *>          SIDE is CHARACTER*1
   57: *>          = 'L': form  H * C
   58: *>          = 'R': form  C * H
   59: *> \endverbatim
   60: *>
   61: *> \param[in] M
   62: *> \verbatim
   63: *>          M is INTEGER
   64: *>          The number of rows of the matrix C.
   65: *> \endverbatim
   66: *>
   67: *> \param[in] N
   68: *> \verbatim
   69: *>          N is INTEGER
   70: *>          The number of columns of the matrix C.
   71: *> \endverbatim
   72: *>
   73: *> \param[in] V
   74: *> \verbatim
   75: *>          V is COMPLEX*16 array, dimension (M) if SIDE = 'L'
   76: *>                                        or (N) if SIDE = 'R'
   77: *>          The vector v in the representation of H.
   78: *> \endverbatim
   79: *>
   80: *> \param[in] TAU
   81: *> \verbatim
   82: *>          TAU is COMPLEX*16
   83: *>          The value tau in the representation of H.
   84: *> \endverbatim
   85: *>
   86: *> \param[in,out] C
   87: *> \verbatim
   88: *>          C is COMPLEX*16 array, dimension (LDC,N)
   89: *>          On entry, the m by n matrix C.
   90: *>          On exit, C is overwritten by the matrix H * C if SIDE = 'L',
   91: *>          or C * H if SIDE = 'R'.
   92: *> \endverbatim
   93: *>
   94: *> \param[in] LDC
   95: *> \verbatim
   96: *>          LDC is INTEGER
   97: *>          The leading dimension of the array C. LDC >= max(1,M).
   98: *> \endverbatim
   99: *>
  100: *> \param[out] WORK
  101: *> \verbatim
  102: *>          WORK is COMPLEX*16 array, dimension (N) if SIDE = 'L'
  103: *>                                            or (M) if SIDE = 'R'
  104: *>          WORK is not referenced if H has order < 11.
  105: *> \endverbatim
  106: *
  107: *  Authors:
  108: *  ========
  109: *
  110: *> \author Univ. of Tennessee
  111: *> \author Univ. of California Berkeley
  112: *> \author Univ. of Colorado Denver
  113: *> \author NAG Ltd.
  114: *
  115: *> \ingroup complex16OTHERauxiliary
  116: *
  117: *  =====================================================================
  118:       SUBROUTINE ZLARFX( SIDE, M, N, V, TAU, C, LDC, WORK )
  119: *
  120: *  -- LAPACK auxiliary routine --
  121: *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
  122: *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
  123: *
  124: *     .. Scalar Arguments ..
  125:       CHARACTER          SIDE
  126:       INTEGER            LDC, M, N
  127:       COMPLEX*16         TAU
  128: *     ..
  129: *     .. Array Arguments ..
  130:       COMPLEX*16         C( LDC, * ), V( * ), WORK( * )
  131: *     ..
  132: *
  133: *  =====================================================================
  134: *
  135: *     .. Parameters ..
  136:       COMPLEX*16         ZERO, ONE
  137:       PARAMETER          ( ZERO = ( 0.0D+0, 0.0D+0 ),
  138:      $                   ONE = ( 1.0D+0, 0.0D+0 ) )
  139: *     ..
  140: *     .. Local Scalars ..
  141:       INTEGER            J
  142:       COMPLEX*16         SUM, T1, T10, T2, T3, T4, T5, T6, T7, T8, T9,
  143:      $                   V1, V10, V2, V3, V4, V5, V6, V7, V8, V9
  144: *     ..
  145: *     .. External Functions ..
  146:       LOGICAL            LSAME
  147:       EXTERNAL           LSAME
  148: *     ..
  149: *     .. External Subroutines ..
  150:       EXTERNAL           ZLARF
  151: *     ..
  152: *     .. Intrinsic Functions ..
  153:       INTRINSIC          DCONJG
  154: *     ..
  155: *     .. Executable Statements ..
  156: *
  157:       IF( TAU.EQ.ZERO )
  158:      $   RETURN
  159:       IF( LSAME( SIDE, 'L' ) ) THEN
  160: *
  161: *        Form  H * C, where H has order m.
  162: *
  163:          GO TO ( 10, 30, 50, 70, 90, 110, 130, 150,
  164:      $           170, 190 )M
  165: *
  166: *        Code for general M
  167: *
  168:          CALL ZLARF( SIDE, M, N, V, 1, TAU, C, LDC, WORK )
  169:          GO TO 410
  170:    10    CONTINUE
  171: *
  172: *        Special code for 1 x 1 Householder
  173: *
  174:          T1 = ONE - TAU*V( 1 )*DCONJG( V( 1 ) )
  175:          DO 20 J = 1, N
  176:             C( 1, J ) = T1*C( 1, J )
  177:    20    CONTINUE
  178:          GO TO 410
  179:    30    CONTINUE
  180: *
  181: *        Special code for 2 x 2 Householder
  182: *
  183:          V1 = DCONJG( V( 1 ) )
  184:          T1 = TAU*DCONJG( V1 )
  185:          V2 = DCONJG( V( 2 ) )
  186:          T2 = TAU*DCONJG( V2 )
  187:          DO 40 J = 1, N
  188:             SUM = V1*C( 1, J ) + V2*C( 2, J )
  189:             C( 1, J ) = C( 1, J ) - SUM*T1
  190:             C( 2, J ) = C( 2, J ) - SUM*T2
  191:    40    CONTINUE
  192:          GO TO 410
  193:    50    CONTINUE
  194: *
  195: *        Special code for 3 x 3 Householder
  196: *
  197:          V1 = DCONJG( V( 1 ) )
  198:          T1 = TAU*DCONJG( V1 )
  199:          V2 = DCONJG( V( 2 ) )
  200:          T2 = TAU*DCONJG( V2 )
  201:          V3 = DCONJG( V( 3 ) )
  202:          T3 = TAU*DCONJG( V3 )
  203:          DO 60 J = 1, N
  204:             SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J )
  205:             C( 1, J ) = C( 1, J ) - SUM*T1
  206:             C( 2, J ) = C( 2, J ) - SUM*T2
  207:             C( 3, J ) = C( 3, J ) - SUM*T3
  208:    60    CONTINUE
  209:          GO TO 410
  210:    70    CONTINUE
  211: *
  212: *        Special code for 4 x 4 Householder
  213: *
  214:          V1 = DCONJG( V( 1 ) )
  215:          T1 = TAU*DCONJG( V1 )
  216:          V2 = DCONJG( V( 2 ) )
  217:          T2 = TAU*DCONJG( V2 )
  218:          V3 = DCONJG( V( 3 ) )
  219:          T3 = TAU*DCONJG( V3 )
  220:          V4 = DCONJG( V( 4 ) )
  221:          T4 = TAU*DCONJG( V4 )
  222:          DO 80 J = 1, N
  223:             SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  224:      $            V4*C( 4, J )
  225:             C( 1, J ) = C( 1, J ) - SUM*T1
  226:             C( 2, J ) = C( 2, J ) - SUM*T2
  227:             C( 3, J ) = C( 3, J ) - SUM*T3
  228:             C( 4, J ) = C( 4, J ) - SUM*T4
  229:    80    CONTINUE
  230:          GO TO 410
  231:    90    CONTINUE
  232: *
  233: *        Special code for 5 x 5 Householder
  234: *
  235:          V1 = DCONJG( V( 1 ) )
  236:          T1 = TAU*DCONJG( V1 )
  237:          V2 = DCONJG( V( 2 ) )
  238:          T2 = TAU*DCONJG( V2 )
  239:          V3 = DCONJG( V( 3 ) )
  240:          T3 = TAU*DCONJG( V3 )
  241:          V4 = DCONJG( V( 4 ) )
  242:          T4 = TAU*DCONJG( V4 )
  243:          V5 = DCONJG( V( 5 ) )
  244:          T5 = TAU*DCONJG( V5 )
  245:          DO 100 J = 1, N
  246:             SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  247:      $            V4*C( 4, J ) + V5*C( 5, J )
  248:             C( 1, J ) = C( 1, J ) - SUM*T1
  249:             C( 2, J ) = C( 2, J ) - SUM*T2
  250:             C( 3, J ) = C( 3, J ) - SUM*T3
  251:             C( 4, J ) = C( 4, J ) - SUM*T4
  252:             C( 5, J ) = C( 5, J ) - SUM*T5
  253:   100    CONTINUE
  254:          GO TO 410
  255:   110    CONTINUE
  256: *
  257: *        Special code for 6 x 6 Householder
  258: *
  259:          V1 = DCONJG( V( 1 ) )
  260:          T1 = TAU*DCONJG( V1 )
  261:          V2 = DCONJG( V( 2 ) )
  262:          T2 = TAU*DCONJG( V2 )
  263:          V3 = DCONJG( V( 3 ) )
  264:          T3 = TAU*DCONJG( V3 )
  265:          V4 = DCONJG( V( 4 ) )
  266:          T4 = TAU*DCONJG( V4 )
  267:          V5 = DCONJG( V( 5 ) )
  268:          T5 = TAU*DCONJG( V5 )
  269:          V6 = DCONJG( V( 6 ) )
  270:          T6 = TAU*DCONJG( V6 )
  271:          DO 120 J = 1, N
  272:             SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  273:      $            V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J )
  274:             C( 1, J ) = C( 1, J ) - SUM*T1
  275:             C( 2, J ) = C( 2, J ) - SUM*T2
  276:             C( 3, J ) = C( 3, J ) - SUM*T3
  277:             C( 4, J ) = C( 4, J ) - SUM*T4
  278:             C( 5, J ) = C( 5, J ) - SUM*T5
  279:             C( 6, J ) = C( 6, J ) - SUM*T6
  280:   120    CONTINUE
  281:          GO TO 410
  282:   130    CONTINUE
  283: *
  284: *        Special code for 7 x 7 Householder
  285: *
  286:          V1 = DCONJG( V( 1 ) )
  287:          T1 = TAU*DCONJG( V1 )
  288:          V2 = DCONJG( V( 2 ) )
  289:          T2 = TAU*DCONJG( V2 )
  290:          V3 = DCONJG( V( 3 ) )
  291:          T3 = TAU*DCONJG( V3 )
  292:          V4 = DCONJG( V( 4 ) )
  293:          T4 = TAU*DCONJG( V4 )
  294:          V5 = DCONJG( V( 5 ) )
  295:          T5 = TAU*DCONJG( V5 )
  296:          V6 = DCONJG( V( 6 ) )
  297:          T6 = TAU*DCONJG( V6 )
  298:          V7 = DCONJG( V( 7 ) )
  299:          T7 = TAU*DCONJG( V7 )
  300:          DO 140 J = 1, N
  301:             SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  302:      $            V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) +
  303:      $            V7*C( 7, J )
  304:             C( 1, J ) = C( 1, J ) - SUM*T1
  305:             C( 2, J ) = C( 2, J ) - SUM*T2
  306:             C( 3, J ) = C( 3, J ) - SUM*T3
  307:             C( 4, J ) = C( 4, J ) - SUM*T4
  308:             C( 5, J ) = C( 5, J ) - SUM*T5
  309:             C( 6, J ) = C( 6, J ) - SUM*T6
  310:             C( 7, J ) = C( 7, J ) - SUM*T7
  311:   140    CONTINUE
  312:          GO TO 410
  313:   150    CONTINUE
  314: *
  315: *        Special code for 8 x 8 Householder
  316: *
  317:          V1 = DCONJG( V( 1 ) )
  318:          T1 = TAU*DCONJG( V1 )
  319:          V2 = DCONJG( V( 2 ) )
  320:          T2 = TAU*DCONJG( V2 )
  321:          V3 = DCONJG( V( 3 ) )
  322:          T3 = TAU*DCONJG( V3 )
  323:          V4 = DCONJG( V( 4 ) )
  324:          T4 = TAU*DCONJG( V4 )
  325:          V5 = DCONJG( V( 5 ) )
  326:          T5 = TAU*DCONJG( V5 )
  327:          V6 = DCONJG( V( 6 ) )
  328:          T6 = TAU*DCONJG( V6 )
  329:          V7 = DCONJG( V( 7 ) )
  330:          T7 = TAU*DCONJG( V7 )
  331:          V8 = DCONJG( V( 8 ) )
  332:          T8 = TAU*DCONJG( V8 )
  333:          DO 160 J = 1, N
  334:             SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  335:      $            V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) +
  336:      $            V7*C( 7, J ) + V8*C( 8, J )
  337:             C( 1, J ) = C( 1, J ) - SUM*T1
  338:             C( 2, J ) = C( 2, J ) - SUM*T2
  339:             C( 3, J ) = C( 3, J ) - SUM*T3
  340:             C( 4, J ) = C( 4, J ) - SUM*T4
  341:             C( 5, J ) = C( 5, J ) - SUM*T5
  342:             C( 6, J ) = C( 6, J ) - SUM*T6
  343:             C( 7, J ) = C( 7, J ) - SUM*T7
  344:             C( 8, J ) = C( 8, J ) - SUM*T8
  345:   160    CONTINUE
  346:          GO TO 410
  347:   170    CONTINUE
  348: *
  349: *        Special code for 9 x 9 Householder
  350: *
  351:          V1 = DCONJG( V( 1 ) )
  352:          T1 = TAU*DCONJG( V1 )
  353:          V2 = DCONJG( V( 2 ) )
  354:          T2 = TAU*DCONJG( V2 )
  355:          V3 = DCONJG( V( 3 ) )
  356:          T3 = TAU*DCONJG( V3 )
  357:          V4 = DCONJG( V( 4 ) )
  358:          T4 = TAU*DCONJG( V4 )
  359:          V5 = DCONJG( V( 5 ) )
  360:          T5 = TAU*DCONJG( V5 )
  361:          V6 = DCONJG( V( 6 ) )
  362:          T6 = TAU*DCONJG( V6 )
  363:          V7 = DCONJG( V( 7 ) )
  364:          T7 = TAU*DCONJG( V7 )
  365:          V8 = DCONJG( V( 8 ) )
  366:          T8 = TAU*DCONJG( V8 )
  367:          V9 = DCONJG( V( 9 ) )
  368:          T9 = TAU*DCONJG( V9 )
  369:          DO 180 J = 1, N
  370:             SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  371:      $            V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) +
  372:      $            V7*C( 7, J ) + V8*C( 8, J ) + V9*C( 9, J )
  373:             C( 1, J ) = C( 1, J ) - SUM*T1
  374:             C( 2, J ) = C( 2, J ) - SUM*T2
  375:             C( 3, J ) = C( 3, J ) - SUM*T3
  376:             C( 4, J ) = C( 4, J ) - SUM*T4
  377:             C( 5, J ) = C( 5, J ) - SUM*T5
  378:             C( 6, J ) = C( 6, J ) - SUM*T6
  379:             C( 7, J ) = C( 7, J ) - SUM*T7
  380:             C( 8, J ) = C( 8, J ) - SUM*T8
  381:             C( 9, J ) = C( 9, J ) - SUM*T9
  382:   180    CONTINUE
  383:          GO TO 410
  384:   190    CONTINUE
  385: *
  386: *        Special code for 10 x 10 Householder
  387: *
  388:          V1 = DCONJG( V( 1 ) )
  389:          T1 = TAU*DCONJG( V1 )
  390:          V2 = DCONJG( V( 2 ) )
  391:          T2 = TAU*DCONJG( V2 )
  392:          V3 = DCONJG( V( 3 ) )
  393:          T3 = TAU*DCONJG( V3 )
  394:          V4 = DCONJG( V( 4 ) )
  395:          T4 = TAU*DCONJG( V4 )
  396:          V5 = DCONJG( V( 5 ) )
  397:          T5 = TAU*DCONJG( V5 )
  398:          V6 = DCONJG( V( 6 ) )
  399:          T6 = TAU*DCONJG( V6 )
  400:          V7 = DCONJG( V( 7 ) )
  401:          T7 = TAU*DCONJG( V7 )
  402:          V8 = DCONJG( V( 8 ) )
  403:          T8 = TAU*DCONJG( V8 )
  404:          V9 = DCONJG( V( 9 ) )
  405:          T9 = TAU*DCONJG( V9 )
  406:          V10 = DCONJG( V( 10 ) )
  407:          T10 = TAU*DCONJG( V10 )
  408:          DO 200 J = 1, N
  409:             SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) +
  410:      $            V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) +
  411:      $            V7*C( 7, J ) + V8*C( 8, J ) + V9*C( 9, J ) +
  412:      $            V10*C( 10, J )
  413:             C( 1, J ) = C( 1, J ) - SUM*T1
  414:             C( 2, J ) = C( 2, J ) - SUM*T2
  415:             C( 3, J ) = C( 3, J ) - SUM*T3
  416:             C( 4, J ) = C( 4, J ) - SUM*T4
  417:             C( 5, J ) = C( 5, J ) - SUM*T5
  418:             C( 6, J ) = C( 6, J ) - SUM*T6
  419:             C( 7, J ) = C( 7, J ) - SUM*T7
  420:             C( 8, J ) = C( 8, J ) - SUM*T8
  421:             C( 9, J ) = C( 9, J ) - SUM*T9
  422:             C( 10, J ) = C( 10, J ) - SUM*T10
  423:   200    CONTINUE
  424:          GO TO 410
  425:       ELSE
  426: *
  427: *        Form  C * H, where H has order n.
  428: *
  429:          GO TO ( 210, 230, 250, 270, 290, 310, 330, 350,
  430:      $           370, 390 )N
  431: *
  432: *        Code for general N
  433: *
  434:          CALL ZLARF( SIDE, M, N, V, 1, TAU, C, LDC, WORK )
  435:          GO TO 410
  436:   210    CONTINUE
  437: *
  438: *        Special code for 1 x 1 Householder
  439: *
  440:          T1 = ONE - TAU*V( 1 )*DCONJG( V( 1 ) )
  441:          DO 220 J = 1, M
  442:             C( J, 1 ) = T1*C( J, 1 )
  443:   220    CONTINUE
  444:          GO TO 410
  445:   230    CONTINUE
  446: *
  447: *        Special code for 2 x 2 Householder
  448: *
  449:          V1 = V( 1 )
  450:          T1 = TAU*DCONJG( V1 )
  451:          V2 = V( 2 )
  452:          T2 = TAU*DCONJG( V2 )
  453:          DO 240 J = 1, M
  454:             SUM = V1*C( J, 1 ) + V2*C( J, 2 )
  455:             C( J, 1 ) = C( J, 1 ) - SUM*T1
  456:             C( J, 2 ) = C( J, 2 ) - SUM*T2
  457:   240    CONTINUE
  458:          GO TO 410
  459:   250    CONTINUE
  460: *
  461: *        Special code for 3 x 3 Householder
  462: *
  463:          V1 = V( 1 )
  464:          T1 = TAU*DCONJG( V1 )
  465:          V2 = V( 2 )
  466:          T2 = TAU*DCONJG( V2 )
  467:          V3 = V( 3 )
  468:          T3 = TAU*DCONJG( V3 )
  469:          DO 260 J = 1, M
  470:             SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 )
  471:             C( J, 1 ) = C( J, 1 ) - SUM*T1
  472:             C( J, 2 ) = C( J, 2 ) - SUM*T2
  473:             C( J, 3 ) = C( J, 3 ) - SUM*T3
  474:   260    CONTINUE
  475:          GO TO 410
  476:   270    CONTINUE
  477: *
  478: *        Special code for 4 x 4 Householder
  479: *
  480:          V1 = V( 1 )
  481:          T1 = TAU*DCONJG( V1 )
  482:          V2 = V( 2 )
  483:          T2 = TAU*DCONJG( V2 )
  484:          V3 = V( 3 )
  485:          T3 = TAU*DCONJG( V3 )
  486:          V4 = V( 4 )
  487:          T4 = TAU*DCONJG( V4 )
  488:          DO 280 J = 1, M
  489:             SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  490:      $            V4*C( J, 4 )
  491:             C( J, 1 ) = C( J, 1 ) - SUM*T1
  492:             C( J, 2 ) = C( J, 2 ) - SUM*T2
  493:             C( J, 3 ) = C( J, 3 ) - SUM*T3
  494:             C( J, 4 ) = C( J, 4 ) - SUM*T4
  495:   280    CONTINUE
  496:          GO TO 410
  497:   290    CONTINUE
  498: *
  499: *        Special code for 5 x 5 Householder
  500: *
  501:          V1 = V( 1 )
  502:          T1 = TAU*DCONJG( V1 )
  503:          V2 = V( 2 )
  504:          T2 = TAU*DCONJG( V2 )
  505:          V3 = V( 3 )
  506:          T3 = TAU*DCONJG( V3 )
  507:          V4 = V( 4 )
  508:          T4 = TAU*DCONJG( V4 )
  509:          V5 = V( 5 )
  510:          T5 = TAU*DCONJG( V5 )
  511:          DO 300 J = 1, M
  512:             SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  513:      $            V4*C( J, 4 ) + V5*C( J, 5 )
  514:             C( J, 1 ) = C( J, 1 ) - SUM*T1
  515:             C( J, 2 ) = C( J, 2 ) - SUM*T2
  516:             C( J, 3 ) = C( J, 3 ) - SUM*T3
  517:             C( J, 4 ) = C( J, 4 ) - SUM*T4
  518:             C( J, 5 ) = C( J, 5 ) - SUM*T5
  519:   300    CONTINUE
  520:          GO TO 410
  521:   310    CONTINUE
  522: *
  523: *        Special code for 6 x 6 Householder
  524: *
  525:          V1 = V( 1 )
  526:          T1 = TAU*DCONJG( V1 )
  527:          V2 = V( 2 )
  528:          T2 = TAU*DCONJG( V2 )
  529:          V3 = V( 3 )
  530:          T3 = TAU*DCONJG( V3 )
  531:          V4 = V( 4 )
  532:          T4 = TAU*DCONJG( V4 )
  533:          V5 = V( 5 )
  534:          T5 = TAU*DCONJG( V5 )
  535:          V6 = V( 6 )
  536:          T6 = TAU*DCONJG( V6 )
  537:          DO 320 J = 1, M
  538:             SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  539:      $            V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 )
  540:             C( J, 1 ) = C( J, 1 ) - SUM*T1
  541:             C( J, 2 ) = C( J, 2 ) - SUM*T2
  542:             C( J, 3 ) = C( J, 3 ) - SUM*T3
  543:             C( J, 4 ) = C( J, 4 ) - SUM*T4
  544:             C( J, 5 ) = C( J, 5 ) - SUM*T5
  545:             C( J, 6 ) = C( J, 6 ) - SUM*T6
  546:   320    CONTINUE
  547:          GO TO 410
  548:   330    CONTINUE
  549: *
  550: *        Special code for 7 x 7 Householder
  551: *
  552:          V1 = V( 1 )
  553:          T1 = TAU*DCONJG( V1 )
  554:          V2 = V( 2 )
  555:          T2 = TAU*DCONJG( V2 )
  556:          V3 = V( 3 )
  557:          T3 = TAU*DCONJG( V3 )
  558:          V4 = V( 4 )
  559:          T4 = TAU*DCONJG( V4 )
  560:          V5 = V( 5 )
  561:          T5 = TAU*DCONJG( V5 )
  562:          V6 = V( 6 )
  563:          T6 = TAU*DCONJG( V6 )
  564:          V7 = V( 7 )
  565:          T7 = TAU*DCONJG( V7 )
  566:          DO 340 J = 1, M
  567:             SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  568:      $            V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) +
  569:      $            V7*C( J, 7 )
  570:             C( J, 1 ) = C( J, 1 ) - SUM*T1
  571:             C( J, 2 ) = C( J, 2 ) - SUM*T2
  572:             C( J, 3 ) = C( J, 3 ) - SUM*T3
  573:             C( J, 4 ) = C( J, 4 ) - SUM*T4
  574:             C( J, 5 ) = C( J, 5 ) - SUM*T5
  575:             C( J, 6 ) = C( J, 6 ) - SUM*T6
  576:             C( J, 7 ) = C( J, 7 ) - SUM*T7
  577:   340    CONTINUE
  578:          GO TO 410
  579:   350    CONTINUE
  580: *
  581: *        Special code for 8 x 8 Householder
  582: *
  583:          V1 = V( 1 )
  584:          T1 = TAU*DCONJG( V1 )
  585:          V2 = V( 2 )
  586:          T2 = TAU*DCONJG( V2 )
  587:          V3 = V( 3 )
  588:          T3 = TAU*DCONJG( V3 )
  589:          V4 = V( 4 )
  590:          T4 = TAU*DCONJG( V4 )
  591:          V5 = V( 5 )
  592:          T5 = TAU*DCONJG( V5 )
  593:          V6 = V( 6 )
  594:          T6 = TAU*DCONJG( V6 )
  595:          V7 = V( 7 )
  596:          T7 = TAU*DCONJG( V7 )
  597:          V8 = V( 8 )
  598:          T8 = TAU*DCONJG( V8 )
  599:          DO 360 J = 1, M
  600:             SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  601:      $            V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) +
  602:      $            V7*C( J, 7 ) + V8*C( J, 8 )
  603:             C( J, 1 ) = C( J, 1 ) - SUM*T1
  604:             C( J, 2 ) = C( J, 2 ) - SUM*T2
  605:             C( J, 3 ) = C( J, 3 ) - SUM*T3
  606:             C( J, 4 ) = C( J, 4 ) - SUM*T4
  607:             C( J, 5 ) = C( J, 5 ) - SUM*T5
  608:             C( J, 6 ) = C( J, 6 ) - SUM*T6
  609:             C( J, 7 ) = C( J, 7 ) - SUM*T7
  610:             C( J, 8 ) = C( J, 8 ) - SUM*T8
  611:   360    CONTINUE
  612:          GO TO 410
  613:   370    CONTINUE
  614: *
  615: *        Special code for 9 x 9 Householder
  616: *
  617:          V1 = V( 1 )
  618:          T1 = TAU*DCONJG( V1 )
  619:          V2 = V( 2 )
  620:          T2 = TAU*DCONJG( V2 )
  621:          V3 = V( 3 )
  622:          T3 = TAU*DCONJG( V3 )
  623:          V4 = V( 4 )
  624:          T4 = TAU*DCONJG( V4 )
  625:          V5 = V( 5 )
  626:          T5 = TAU*DCONJG( V5 )
  627:          V6 = V( 6 )
  628:          T6 = TAU*DCONJG( V6 )
  629:          V7 = V( 7 )
  630:          T7 = TAU*DCONJG( V7 )
  631:          V8 = V( 8 )
  632:          T8 = TAU*DCONJG( V8 )
  633:          V9 = V( 9 )
  634:          T9 = TAU*DCONJG( V9 )
  635:          DO 380 J = 1, M
  636:             SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  637:      $            V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) +
  638:      $            V7*C( J, 7 ) + V8*C( J, 8 ) + V9*C( J, 9 )
  639:             C( J, 1 ) = C( J, 1 ) - SUM*T1
  640:             C( J, 2 ) = C( J, 2 ) - SUM*T2
  641:             C( J, 3 ) = C( J, 3 ) - SUM*T3
  642:             C( J, 4 ) = C( J, 4 ) - SUM*T4
  643:             C( J, 5 ) = C( J, 5 ) - SUM*T5
  644:             C( J, 6 ) = C( J, 6 ) - SUM*T6
  645:             C( J, 7 ) = C( J, 7 ) - SUM*T7
  646:             C( J, 8 ) = C( J, 8 ) - SUM*T8
  647:             C( J, 9 ) = C( J, 9 ) - SUM*T9
  648:   380    CONTINUE
  649:          GO TO 410
  650:   390    CONTINUE
  651: *
  652: *        Special code for 10 x 10 Householder
  653: *
  654:          V1 = V( 1 )
  655:          T1 = TAU*DCONJG( V1 )
  656:          V2 = V( 2 )
  657:          T2 = TAU*DCONJG( V2 )
  658:          V3 = V( 3 )
  659:          T3 = TAU*DCONJG( V3 )
  660:          V4 = V( 4 )
  661:          T4 = TAU*DCONJG( V4 )
  662:          V5 = V( 5 )
  663:          T5 = TAU*DCONJG( V5 )
  664:          V6 = V( 6 )
  665:          T6 = TAU*DCONJG( V6 )
  666:          V7 = V( 7 )
  667:          T7 = TAU*DCONJG( V7 )
  668:          V8 = V( 8 )
  669:          T8 = TAU*DCONJG( V8 )
  670:          V9 = V( 9 )
  671:          T9 = TAU*DCONJG( V9 )
  672:          V10 = V( 10 )
  673:          T10 = TAU*DCONJG( V10 )
  674:          DO 400 J = 1, M
  675:             SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) +
  676:      $            V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) +
  677:      $            V7*C( J, 7 ) + V8*C( J, 8 ) + V9*C( J, 9 ) +
  678:      $            V10*C( J, 10 )
  679:             C( J, 1 ) = C( J, 1 ) - SUM*T1
  680:             C( J, 2 ) = C( J, 2 ) - SUM*T2
  681:             C( J, 3 ) = C( J, 3 ) - SUM*T3
  682:             C( J, 4 ) = C( J, 4 ) - SUM*T4
  683:             C( J, 5 ) = C( J, 5 ) - SUM*T5
  684:             C( J, 6 ) = C( J, 6 ) - SUM*T6
  685:             C( J, 7 ) = C( J, 7 ) - SUM*T7
  686:             C( J, 8 ) = C( J, 8 ) - SUM*T8
  687:             C( J, 9 ) = C( J, 9 ) - SUM*T9
  688:             C( J, 10 ) = C( J, 10 ) - SUM*T10
  689:   400    CONTINUE
  690:          GO TO 410
  691:       END IF
  692:   410 CONTINUE
  693:       RETURN
  694: *
  695: *     End of ZLARFX
  696: *
  697:       END

CVSweb interface <joel.bertrand@systella.fr>