Annotation of rpl/lapack/lapack/zlanhf.f, revision 1.9

1.6       bertrand    1: *> \brief \b ZLANHF
                      2: *
                      3: *  =========== DOCUMENTATION ===========
                      4: *
                      5: * Online html documentation available at 
                      6: *            http://www.netlib.org/lapack/explore-html/ 
1.1       bertrand    7: *
1.6       bertrand    8: *> \htmlonly
                      9: *> Download ZLANHF + dependencies 
                     10: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlanhf.f"> 
                     11: *> [TGZ]</a> 
                     12: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlanhf.f"> 
                     13: *> [ZIP]</a> 
                     14: *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlanhf.f"> 
                     15: *> [TXT]</a>
                     16: *> \endhtmlonly 
1.1       bertrand   17: *
1.6       bertrand   18: *  Definition:
                     19: *  ===========
                     20: *
                     21: *       DOUBLE PRECISION FUNCTION ZLANHF( NORM, TRANSR, UPLO, N, A, WORK )
                     22: * 
                     23: *       .. Scalar Arguments ..
                     24: *       CHARACTER          NORM, TRANSR, UPLO
                     25: *       INTEGER            N
                     26: *       ..
                     27: *       .. Array Arguments ..
                     28: *       DOUBLE PRECISION   WORK( 0: * )
                     29: *       COMPLEX*16         A( 0: * )
                     30: *       ..
                     31: *  
                     32: *
                     33: *> \par Purpose:
                     34: *  =============
                     35: *>
                     36: *> \verbatim
                     37: *>
                     38: *> ZLANHF  returns the value of the one norm,  or the Frobenius norm, or
                     39: *> the  infinity norm,  or the  element of  largest absolute value  of a
                     40: *> complex Hermitian matrix A in RFP format.
                     41: *> \endverbatim
                     42: *>
                     43: *> \return ZLANHF
                     44: *> \verbatim
                     45: *>
                     46: *>    ZLANHF = ( max(abs(A(i,j))), NORM = 'M' or 'm'
                     47: *>             (
                     48: *>             ( norm1(A),         NORM = '1', 'O' or 'o'
                     49: *>             (
                     50: *>             ( normI(A),         NORM = 'I' or 'i'
                     51: *>             (
                     52: *>             ( normF(A),         NORM = 'F', 'f', 'E' or 'e'
                     53: *>
                     54: *> where  norm1  denotes the  one norm of a matrix (maximum column sum),
                     55: *> normI  denotes the  infinity norm  of a matrix  (maximum row sum) and
                     56: *> normF  denotes the  Frobenius norm of a matrix (square root of sum of
                     57: *> squares).  Note that  max(abs(A(i,j)))  is not a  matrix norm.
                     58: *> \endverbatim
                     59: *
                     60: *  Arguments:
                     61: *  ==========
                     62: *
                     63: *> \param[in] NORM
                     64: *> \verbatim
                     65: *>          NORM is CHARACTER
                     66: *>            Specifies the value to be returned in ZLANHF as described
                     67: *>            above.
                     68: *> \endverbatim
                     69: *>
                     70: *> \param[in] TRANSR
                     71: *> \verbatim
                     72: *>          TRANSR is CHARACTER
                     73: *>            Specifies whether the RFP format of A is normal or
                     74: *>            conjugate-transposed format.
                     75: *>            = 'N':  RFP format is Normal
                     76: *>            = 'C':  RFP format is Conjugate-transposed
                     77: *> \endverbatim
                     78: *>
                     79: *> \param[in] UPLO
                     80: *> \verbatim
                     81: *>          UPLO is CHARACTER
                     82: *>            On entry, UPLO specifies whether the RFP matrix A came from
                     83: *>            an upper or lower triangular matrix as follows:
                     84: *>
                     85: *>            UPLO = 'U' or 'u' RFP A came from an upper triangular
                     86: *>            matrix
                     87: *>
                     88: *>            UPLO = 'L' or 'l' RFP A came from a  lower triangular
                     89: *>            matrix
                     90: *> \endverbatim
                     91: *>
                     92: *> \param[in] N
                     93: *> \verbatim
                     94: *>          N is INTEGER
                     95: *>            The order of the matrix A.  N >= 0.  When N = 0, ZLANHF is
                     96: *>            set to zero.
                     97: *> \endverbatim
                     98: *>
                     99: *> \param[in] A
                    100: *> \verbatim
                    101: *>          A is COMPLEX*16 array, dimension ( N*(N+1)/2 );
                    102: *>            On entry, the matrix A in RFP Format.
                    103: *>            RFP Format is described by TRANSR, UPLO and N as follows:
                    104: *>            If TRANSR='N' then RFP A is (0:N,0:K-1) when N is even;
                    105: *>            K=N/2. RFP A is (0:N-1,0:K) when N is odd; K=N/2. If
                    106: *>            TRANSR = 'C' then RFP is the Conjugate-transpose of RFP A
                    107: *>            as defined when TRANSR = 'N'. The contents of RFP A are
                    108: *>            defined by UPLO as follows: If UPLO = 'U' the RFP A
                    109: *>            contains the ( N*(N+1)/2 ) elements of upper packed A
                    110: *>            either in normal or conjugate-transpose Format. If
                    111: *>            UPLO = 'L' the RFP A contains the ( N*(N+1) /2 ) elements
                    112: *>            of lower packed A either in normal or conjugate-transpose
                    113: *>            Format. The LDA of RFP A is (N+1)/2 when TRANSR = 'C'. When
                    114: *>            TRANSR is 'N' the LDA is N+1 when N is even and is N when
                    115: *>            is odd. See the Note below for more details.
                    116: *>            Unchanged on exit.
                    117: *> \endverbatim
                    118: *>
                    119: *> \param[out] WORK
                    120: *> \verbatim
                    121: *>          WORK is DOUBLE PRECISION array, dimension (LWORK),
                    122: *>            where LWORK >= N when NORM = 'I' or '1' or 'O'; otherwise,
                    123: *>            WORK is not referenced.
                    124: *> \endverbatim
                    125: *
                    126: *  Authors:
                    127: *  ========
                    128: *
                    129: *> \author Univ. of Tennessee 
                    130: *> \author Univ. of California Berkeley 
                    131: *> \author Univ. of Colorado Denver 
                    132: *> \author NAG Ltd. 
                    133: *
                    134: *> \date November 2011
                    135: *
                    136: *> \ingroup complex16OTHERcomputational
                    137: *
                    138: *> \par Further Details:
                    139: *  =====================
                    140: *>
                    141: *> \verbatim
                    142: *>
                    143: *>  We first consider Standard Packed Format when N is even.
                    144: *>  We give an example where N = 6.
                    145: *>
                    146: *>      AP is Upper             AP is Lower
                    147: *>
                    148: *>   00 01 02 03 04 05       00
                    149: *>      11 12 13 14 15       10 11
                    150: *>         22 23 24 25       20 21 22
                    151: *>            33 34 35       30 31 32 33
                    152: *>               44 45       40 41 42 43 44
                    153: *>                  55       50 51 52 53 54 55
                    154: *>
                    155: *>
                    156: *>  Let TRANSR = 'N'. RFP holds AP as follows:
                    157: *>  For UPLO = 'U' the upper trapezoid A(0:5,0:2) consists of the last
                    158: *>  three columns of AP upper. The lower triangle A(4:6,0:2) consists of
                    159: *>  conjugate-transpose of the first three columns of AP upper.
                    160: *>  For UPLO = 'L' the lower trapezoid A(1:6,0:2) consists of the first
                    161: *>  three columns of AP lower. The upper triangle A(0:2,0:2) consists of
                    162: *>  conjugate-transpose of the last three columns of AP lower.
                    163: *>  To denote conjugate we place -- above the element. This covers the
                    164: *>  case N even and TRANSR = 'N'.
                    165: *>
                    166: *>         RFP A                   RFP A
                    167: *>
                    168: *>                                -- -- --
                    169: *>        03 04 05                33 43 53
                    170: *>                                   -- --
                    171: *>        13 14 15                00 44 54
                    172: *>                                      --
                    173: *>        23 24 25                10 11 55
                    174: *>
                    175: *>        33 34 35                20 21 22
                    176: *>        --
                    177: *>        00 44 45                30 31 32
                    178: *>        -- --
                    179: *>        01 11 55                40 41 42
                    180: *>        -- -- --
                    181: *>        02 12 22                50 51 52
                    182: *>
                    183: *>  Now let TRANSR = 'C'. RFP A in both UPLO cases is just the conjugate-
                    184: *>  transpose of RFP A above. One therefore gets:
                    185: *>
                    186: *>
                    187: *>           RFP A                   RFP A
                    188: *>
                    189: *>     -- -- -- --                -- -- -- -- -- --
                    190: *>     03 13 23 33 00 01 02    33 00 10 20 30 40 50
                    191: *>     -- -- -- -- --                -- -- -- -- --
                    192: *>     04 14 24 34 44 11 12    43 44 11 21 31 41 51
                    193: *>     -- -- -- -- -- --                -- -- -- --
                    194: *>     05 15 25 35 45 55 22    53 54 55 22 32 42 52
                    195: *>
                    196: *>
                    197: *>  We next  consider Standard Packed Format when N is odd.
                    198: *>  We give an example where N = 5.
                    199: *>
                    200: *>     AP is Upper                 AP is Lower
                    201: *>
                    202: *>   00 01 02 03 04              00
                    203: *>      11 12 13 14              10 11
                    204: *>         22 23 24              20 21 22
                    205: *>            33 34              30 31 32 33
                    206: *>               44              40 41 42 43 44
                    207: *>
                    208: *>
                    209: *>  Let TRANSR = 'N'. RFP holds AP as follows:
                    210: *>  For UPLO = 'U' the upper trapezoid A(0:4,0:2) consists of the last
                    211: *>  three columns of AP upper. The lower triangle A(3:4,0:1) consists of
                    212: *>  conjugate-transpose of the first two   columns of AP upper.
                    213: *>  For UPLO = 'L' the lower trapezoid A(0:4,0:2) consists of the first
                    214: *>  three columns of AP lower. The upper triangle A(0:1,1:2) consists of
                    215: *>  conjugate-transpose of the last two   columns of AP lower.
                    216: *>  To denote conjugate we place -- above the element. This covers the
                    217: *>  case N odd  and TRANSR = 'N'.
                    218: *>
                    219: *>         RFP A                   RFP A
                    220: *>
                    221: *>                                   -- --
                    222: *>        02 03 04                00 33 43
                    223: *>                                      --
                    224: *>        12 13 14                10 11 44
                    225: *>
                    226: *>        22 23 24                20 21 22
                    227: *>        --
                    228: *>        00 33 34                30 31 32
                    229: *>        -- --
                    230: *>        01 11 44                40 41 42
                    231: *>
                    232: *>  Now let TRANSR = 'C'. RFP A in both UPLO cases is just the conjugate-
                    233: *>  transpose of RFP A above. One therefore gets:
                    234: *>
                    235: *>
                    236: *>           RFP A                   RFP A
                    237: *>
                    238: *>     -- -- --                   -- -- -- -- -- --
                    239: *>     02 12 22 00 01             00 10 20 30 40 50
                    240: *>     -- -- -- --                   -- -- -- -- --
                    241: *>     03 13 23 33 11             33 11 21 31 41 51
                    242: *>     -- -- -- -- --                   -- -- -- --
                    243: *>     04 14 24 34 44             43 44 22 32 42 52
                    244: *> \endverbatim
                    245: *>
                    246: *  =====================================================================
                    247:       DOUBLE PRECISION FUNCTION ZLANHF( NORM, TRANSR, UPLO, N, A, WORK )
1.1       bertrand  248: *
1.6       bertrand  249: *  -- LAPACK computational routine (version 3.4.0) --
1.1       bertrand  250: *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
                    251: *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
1.6       bertrand  252: *     November 2011
1.1       bertrand  253: *
                    254: *     .. Scalar Arguments ..
                    255:       CHARACTER          NORM, TRANSR, UPLO
                    256:       INTEGER            N
                    257: *     ..
                    258: *     .. Array Arguments ..
                    259:       DOUBLE PRECISION   WORK( 0: * )
                    260:       COMPLEX*16         A( 0: * )
                    261: *     ..
                    262: *
                    263: *  =====================================================================
                    264: *
                    265: *     .. Parameters ..
                    266:       DOUBLE PRECISION   ONE, ZERO
                    267:       PARAMETER          ( ONE = 1.0D+0, ZERO = 0.0D+0 )
                    268: *     ..
                    269: *     .. Local Scalars ..
                    270:       INTEGER            I, J, IFM, ILU, NOE, N1, K, L, LDA
                    271:       DOUBLE PRECISION   SCALE, S, VALUE, AA
                    272: *     ..
                    273: *     .. External Functions ..
                    274:       LOGICAL            LSAME
                    275:       INTEGER            IDAMAX
                    276:       EXTERNAL           LSAME, IDAMAX
                    277: *     ..
                    278: *     .. External Subroutines ..
                    279:       EXTERNAL           ZLASSQ
                    280: *     ..
                    281: *     .. Intrinsic Functions ..
                    282:       INTRINSIC          ABS, DBLE, MAX, SQRT
                    283: *     ..
                    284: *     .. Executable Statements ..
                    285: *
                    286:       IF( N.EQ.0 ) THEN
                    287:          ZLANHF = ZERO
                    288:          RETURN
1.8       bertrand  289:       ELSE IF( N.EQ.1 ) THEN
                    290:          ZLANHF = ABS( A(0) )
                    291:          RETURN
1.1       bertrand  292:       END IF
                    293: *
                    294: *     set noe = 1 if n is odd. if n is even set noe=0
                    295: *
                    296:       NOE = 1
                    297:       IF( MOD( N, 2 ).EQ.0 )
1.5       bertrand  298:      $   NOE = 0
1.1       bertrand  299: *
                    300: *     set ifm = 0 when form='C' or 'c' and 1 otherwise
                    301: *
                    302:       IFM = 1
                    303:       IF( LSAME( TRANSR, 'C' ) )
1.5       bertrand  304:      $   IFM = 0
1.1       bertrand  305: *
                    306: *     set ilu = 0 when uplo='U or 'u' and 1 otherwise
                    307: *
                    308:       ILU = 1
                    309:       IF( LSAME( UPLO, 'U' ) )
1.5       bertrand  310:      $   ILU = 0
1.1       bertrand  311: *
                    312: *     set lda = (n+1)/2 when ifm = 0
                    313: *     set lda = n when ifm = 1 and noe = 1
                    314: *     set lda = n+1 when ifm = 1 and noe = 0
                    315: *
                    316:       IF( IFM.EQ.1 ) THEN
                    317:          IF( NOE.EQ.1 ) THEN
                    318:             LDA = N
                    319:          ELSE
                    320: *           noe=0
                    321:             LDA = N + 1
                    322:          END IF
                    323:       ELSE
                    324: *        ifm=0
                    325:          LDA = ( N+1 ) / 2
                    326:       END IF
                    327: *
                    328:       IF( LSAME( NORM, 'M' ) ) THEN
                    329: *
                    330: *       Find max(abs(A(i,j))).
                    331: *
                    332:          K = ( N+1 ) / 2
                    333:          VALUE = ZERO
                    334:          IF( NOE.EQ.1 ) THEN
                    335: *           n is odd & n = k + k - 1
                    336:             IF( IFM.EQ.1 ) THEN
                    337: *              A is n by k
                    338:                IF( ILU.EQ.1 ) THEN
                    339: *                 uplo ='L'
                    340:                   J = 0
                    341: *                 -> L(0,0)
                    342:                   VALUE = MAX( VALUE, ABS( DBLE( A( J+J*LDA ) ) ) )
                    343:                   DO I = 1, N - 1
                    344:                      VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    345:                   END DO
                    346:                   DO J = 1, K - 1
                    347:                      DO I = 0, J - 2
                    348:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    349:                      END DO
                    350:                      I = J - 1
                    351: *                    L(k+j,k+j)
                    352:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    353:                      I = J
                    354: *                    -> L(j,j)
                    355:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    356:                      DO I = J + 1, N - 1
                    357:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    358:                      END DO
                    359:                   END DO
                    360:                ELSE
                    361: *                 uplo = 'U'
                    362:                   DO J = 0, K - 2
                    363:                      DO I = 0, K + J - 2
                    364:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    365:                      END DO
                    366:                      I = K + J - 1
                    367: *                    -> U(i,i)
                    368:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    369:                      I = I + 1
                    370: *                    =k+j; i -> U(j,j)
                    371:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    372:                      DO I = K + J + 1, N - 1
                    373:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    374:                      END DO
                    375:                   END DO
                    376:                   DO I = 0, N - 2
                    377:                      VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    378: *                    j=k-1
                    379:                   END DO
                    380: *                 i=n-1 -> U(n-1,n-1)
                    381:                   VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    382:                END IF
                    383:             ELSE
                    384: *              xpose case; A is k by n
                    385:                IF( ILU.EQ.1 ) THEN
                    386: *                 uplo ='L'
                    387:                   DO J = 0, K - 2
                    388:                      DO I = 0, J - 1
                    389:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    390:                      END DO
                    391:                      I = J
                    392: *                    L(i,i)
                    393:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    394:                      I = J + 1
                    395: *                    L(j+k,j+k)
                    396:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    397:                      DO I = J + 2, K - 1
                    398:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    399:                      END DO
                    400:                   END DO
                    401:                   J = K - 1
                    402:                   DO I = 0, K - 2
                    403:                      VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    404:                   END DO
                    405:                   I = K - 1
                    406: *                 -> L(i,i) is at A(i,j)
                    407:                   VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    408:                   DO J = K, N - 1
                    409:                      DO I = 0, K - 1
                    410:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    411:                      END DO
                    412:                   END DO
                    413:                ELSE
                    414: *                 uplo = 'U'
                    415:                   DO J = 0, K - 2
                    416:                      DO I = 0, K - 1
                    417:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    418:                      END DO
                    419:                   END DO
                    420:                   J = K - 1
                    421: *                 -> U(j,j) is at A(0,j)
                    422:                   VALUE = MAX( VALUE, ABS( DBLE( A( 0+J*LDA ) ) ) )
                    423:                   DO I = 1, K - 1
                    424:                      VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    425:                   END DO
                    426:                   DO J = K, N - 1
                    427:                      DO I = 0, J - K - 1
                    428:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    429:                      END DO
                    430:                      I = J - K
                    431: *                    -> U(i,i) at A(i,j)
                    432:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    433:                      I = J - K + 1
                    434: *                    U(j,j)
                    435:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    436:                      DO I = J - K + 2, K - 1
                    437:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    438:                      END DO
                    439:                   END DO
                    440:                END IF
                    441:             END IF
                    442:          ELSE
                    443: *           n is even & k = n/2
                    444:             IF( IFM.EQ.1 ) THEN
                    445: *              A is n+1 by k
                    446:                IF( ILU.EQ.1 ) THEN
                    447: *                 uplo ='L'
                    448:                   J = 0
                    449: *                 -> L(k,k) & j=1 -> L(0,0)
                    450:                   VALUE = MAX( VALUE, ABS( DBLE( A( J+J*LDA ) ) ) )
                    451:                   VALUE = MAX( VALUE, ABS( DBLE( A( J+1+J*LDA ) ) ) )
                    452:                   DO I = 2, N
                    453:                      VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    454:                   END DO
                    455:                   DO J = 1, K - 1
                    456:                      DO I = 0, J - 1
                    457:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    458:                      END DO
                    459:                      I = J
                    460: *                    L(k+j,k+j)
                    461:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    462:                      I = J + 1
                    463: *                    -> L(j,j)
                    464:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    465:                      DO I = J + 2, N
                    466:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    467:                      END DO
                    468:                   END DO
                    469:                ELSE
                    470: *                 uplo = 'U'
                    471:                   DO J = 0, K - 2
                    472:                      DO I = 0, K + J - 1
                    473:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    474:                      END DO
                    475:                      I = K + J
                    476: *                    -> U(i,i)
                    477:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    478:                      I = I + 1
                    479: *                    =k+j+1; i -> U(j,j)
                    480:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    481:                      DO I = K + J + 2, N
                    482:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    483:                      END DO
                    484:                   END DO
                    485:                   DO I = 0, N - 2
                    486:                      VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    487: *                    j=k-1
                    488:                   END DO
                    489: *                 i=n-1 -> U(n-1,n-1)
                    490:                   VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    491:                   I = N
                    492: *                 -> U(k-1,k-1)
                    493:                   VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    494:                END IF
                    495:             ELSE
                    496: *              xpose case; A is k by n+1
                    497:                IF( ILU.EQ.1 ) THEN
                    498: *                 uplo ='L'
                    499:                   J = 0
                    500: *                 -> L(k,k) at A(0,0)
                    501:                   VALUE = MAX( VALUE, ABS( DBLE( A( J+J*LDA ) ) ) )
                    502:                   DO I = 1, K - 1
                    503:                      VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    504:                   END DO
                    505:                   DO J = 1, K - 1
                    506:                      DO I = 0, J - 2
                    507:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    508:                      END DO
                    509:                      I = J - 1
                    510: *                    L(i,i)
                    511:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    512:                      I = J
                    513: *                    L(j+k,j+k)
                    514:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    515:                      DO I = J + 1, K - 1
                    516:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    517:                      END DO
                    518:                   END DO
                    519:                   J = K
                    520:                   DO I = 0, K - 2
                    521:                      VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    522:                   END DO
                    523:                   I = K - 1
                    524: *                 -> L(i,i) is at A(i,j)
                    525:                   VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    526:                   DO J = K + 1, N
                    527:                      DO I = 0, K - 1
                    528:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    529:                      END DO
                    530:                   END DO
                    531:                ELSE
                    532: *                 uplo = 'U'
                    533:                   DO J = 0, K - 1
                    534:                      DO I = 0, K - 1
                    535:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    536:                      END DO
                    537:                   END DO
                    538:                   J = K
                    539: *                 -> U(j,j) is at A(0,j)
                    540:                   VALUE = MAX( VALUE, ABS( DBLE( A( 0+J*LDA ) ) ) )
                    541:                   DO I = 1, K - 1
                    542:                      VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    543:                   END DO
                    544:                   DO J = K + 1, N - 1
                    545:                      DO I = 0, J - K - 2
                    546:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    547:                      END DO
                    548:                      I = J - K - 1
                    549: *                    -> U(i,i) at A(i,j)
                    550:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    551:                      I = J - K
                    552: *                    U(j,j)
                    553:                      VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    554:                      DO I = J - K + 1, K - 1
                    555:                         VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    556:                      END DO
                    557:                   END DO
                    558:                   J = N
                    559:                   DO I = 0, K - 2
                    560:                      VALUE = MAX( VALUE, ABS( A( I+J*LDA ) ) )
                    561:                   END DO
                    562:                   I = K - 1
                    563: *                 U(k,k) at A(i,j)
                    564:                   VALUE = MAX( VALUE, ABS( DBLE( A( I+J*LDA ) ) ) )
                    565:                END IF
                    566:             END IF
                    567:          END IF
                    568:       ELSE IF( ( LSAME( NORM, 'I' ) ) .OR. ( LSAME( NORM, 'O' ) ) .OR.
1.5       bertrand  569:      $         ( NORM.EQ.'1' ) ) THEN
1.1       bertrand  570: *
                    571: *       Find normI(A) ( = norm1(A), since A is Hermitian).
                    572: *
                    573:          IF( IFM.EQ.1 ) THEN
                    574: *           A is 'N'
                    575:             K = N / 2
                    576:             IF( NOE.EQ.1 ) THEN
                    577: *              n is odd & A is n by (n+1)/2
                    578:                IF( ILU.EQ.0 ) THEN
                    579: *                 uplo = 'U'
                    580:                   DO I = 0, K - 1
                    581:                      WORK( I ) = ZERO
                    582:                   END DO
                    583:                   DO J = 0, K
                    584:                      S = ZERO
                    585:                      DO I = 0, K + J - 1
                    586:                         AA = ABS( A( I+J*LDA ) )
                    587: *                       -> A(i,j+k)
                    588:                         S = S + AA
                    589:                         WORK( I ) = WORK( I ) + AA
                    590:                      END DO
                    591:                      AA = ABS( DBLE( A( I+J*LDA ) ) )
                    592: *                    -> A(j+k,j+k)
                    593:                      WORK( J+K ) = S + AA
                    594:                      IF( I.EQ.K+K )
1.5       bertrand  595:      $                  GO TO 10
1.1       bertrand  596:                      I = I + 1
                    597:                      AA = ABS( DBLE( A( I+J*LDA ) ) )
                    598: *                    -> A(j,j)
                    599:                      WORK( J ) = WORK( J ) + AA
                    600:                      S = ZERO
                    601:                      DO L = J + 1, K - 1
                    602:                         I = I + 1
                    603:                         AA = ABS( A( I+J*LDA ) )
                    604: *                       -> A(l,j)
                    605:                         S = S + AA
                    606:                         WORK( L ) = WORK( L ) + AA
                    607:                      END DO
                    608:                      WORK( J ) = WORK( J ) + S
                    609:                   END DO
                    610:    10             CONTINUE
                    611:                   I = IDAMAX( N, WORK, 1 )
                    612:                   VALUE = WORK( I-1 )
                    613:                ELSE
                    614: *                 ilu = 1 & uplo = 'L'
                    615:                   K = K + 1
                    616: *                 k=(n+1)/2 for n odd and ilu=1
                    617:                   DO I = K, N - 1
                    618:                      WORK( I ) = ZERO
                    619:                   END DO
                    620:                   DO J = K - 1, 0, -1
                    621:                      S = ZERO
                    622:                      DO I = 0, J - 2
                    623:                         AA = ABS( A( I+J*LDA ) )
                    624: *                       -> A(j+k,i+k)
                    625:                         S = S + AA
                    626:                         WORK( I+K ) = WORK( I+K ) + AA
                    627:                      END DO
                    628:                      IF( J.GT.0 ) THEN
                    629:                         AA = ABS( DBLE( A( I+J*LDA ) ) )
                    630: *                       -> A(j+k,j+k)
                    631:                         S = S + AA
                    632:                         WORK( I+K ) = WORK( I+K ) + S
                    633: *                       i=j
                    634:                         I = I + 1
                    635:                      END IF
                    636:                      AA = ABS( DBLE( A( I+J*LDA ) ) )
                    637: *                    -> A(j,j)
                    638:                      WORK( J ) = AA
                    639:                      S = ZERO
                    640:                      DO L = J + 1, N - 1
                    641:                         I = I + 1
                    642:                         AA = ABS( A( I+J*LDA ) )
                    643: *                       -> A(l,j)
                    644:                         S = S + AA
                    645:                         WORK( L ) = WORK( L ) + AA
                    646:                      END DO
                    647:                      WORK( J ) = WORK( J ) + S
                    648:                   END DO
                    649:                   I = IDAMAX( N, WORK, 1 )
                    650:                   VALUE = WORK( I-1 )
                    651:                END IF
                    652:             ELSE
                    653: *              n is even & A is n+1 by k = n/2
                    654:                IF( ILU.EQ.0 ) THEN
                    655: *                 uplo = 'U'
                    656:                   DO I = 0, K - 1
                    657:                      WORK( I ) = ZERO
                    658:                   END DO
                    659:                   DO J = 0, K - 1
                    660:                      S = ZERO
                    661:                      DO I = 0, K + J - 1
                    662:                         AA = ABS( A( I+J*LDA ) )
                    663: *                       -> A(i,j+k)
                    664:                         S = S + AA
                    665:                         WORK( I ) = WORK( I ) + AA
                    666:                      END DO
                    667:                      AA = ABS( DBLE( A( I+J*LDA ) ) )
                    668: *                    -> A(j+k,j+k)
                    669:                      WORK( J+K ) = S + AA
                    670:                      I = I + 1
                    671:                      AA = ABS( DBLE( A( I+J*LDA ) ) )
                    672: *                    -> A(j,j)
                    673:                      WORK( J ) = WORK( J ) + AA
                    674:                      S = ZERO
                    675:                      DO L = J + 1, K - 1
                    676:                         I = I + 1
                    677:                         AA = ABS( A( I+J*LDA ) )
                    678: *                       -> A(l,j)
                    679:                         S = S + AA
                    680:                         WORK( L ) = WORK( L ) + AA
                    681:                      END DO
                    682:                      WORK( J ) = WORK( J ) + S
                    683:                   END DO
                    684:                   I = IDAMAX( N, WORK, 1 )
                    685:                   VALUE = WORK( I-1 )
                    686:                ELSE
                    687: *                 ilu = 1 & uplo = 'L'
                    688:                   DO I = K, N - 1
                    689:                      WORK( I ) = ZERO
                    690:                   END DO
                    691:                   DO J = K - 1, 0, -1
                    692:                      S = ZERO
                    693:                      DO I = 0, J - 1
                    694:                         AA = ABS( A( I+J*LDA ) )
                    695: *                       -> A(j+k,i+k)
                    696:                         S = S + AA
                    697:                         WORK( I+K ) = WORK( I+K ) + AA
                    698:                      END DO
                    699:                      AA = ABS( DBLE( A( I+J*LDA ) ) )
                    700: *                    -> A(j+k,j+k)
                    701:                      S = S + AA
                    702:                      WORK( I+K ) = WORK( I+K ) + S
                    703: *                    i=j
                    704:                      I = I + 1
                    705:                      AA = ABS( DBLE( A( I+J*LDA ) ) )
                    706: *                    -> A(j,j)
                    707:                      WORK( J ) = AA
                    708:                      S = ZERO
                    709:                      DO L = J + 1, N - 1
                    710:                         I = I + 1
                    711:                         AA = ABS( A( I+J*LDA ) )
                    712: *                       -> A(l,j)
                    713:                         S = S + AA
                    714:                         WORK( L ) = WORK( L ) + AA
                    715:                      END DO
                    716:                      WORK( J ) = WORK( J ) + S
                    717:                   END DO
                    718:                   I = IDAMAX( N, WORK, 1 )
                    719:                   VALUE = WORK( I-1 )
                    720:                END IF
                    721:             END IF
                    722:          ELSE
                    723: *           ifm=0
                    724:             K = N / 2
                    725:             IF( NOE.EQ.1 ) THEN
                    726: *              n is odd & A is (n+1)/2 by n
                    727:                IF( ILU.EQ.0 ) THEN
                    728: *                 uplo = 'U'
                    729:                   N1 = K
                    730: *                 n/2
                    731:                   K = K + 1
                    732: *                 k is the row size and lda
                    733:                   DO I = N1, N - 1
                    734:                      WORK( I ) = ZERO
                    735:                   END DO
                    736:                   DO J = 0, N1 - 1
                    737:                      S = ZERO
                    738:                      DO I = 0, K - 1
                    739:                         AA = ABS( A( I+J*LDA ) )
                    740: *                       A(j,n1+i)
                    741:                         WORK( I+N1 ) = WORK( I+N1 ) + AA
                    742:                         S = S + AA
                    743:                      END DO
                    744:                      WORK( J ) = S
                    745:                   END DO
                    746: *                 j=n1=k-1 is special
                    747:                   S = ABS( DBLE( A( 0+J*LDA ) ) )
                    748: *                 A(k-1,k-1)
                    749:                   DO I = 1, K - 1
                    750:                      AA = ABS( A( I+J*LDA ) )
                    751: *                    A(k-1,i+n1)
                    752:                      WORK( I+N1 ) = WORK( I+N1 ) + AA
                    753:                      S = S + AA
                    754:                   END DO
                    755:                   WORK( J ) = WORK( J ) + S
                    756:                   DO J = K, N - 1
                    757:                      S = ZERO
                    758:                      DO I = 0, J - K - 1
                    759:                         AA = ABS( A( I+J*LDA ) )
                    760: *                       A(i,j-k)
                    761:                         WORK( I ) = WORK( I ) + AA
                    762:                         S = S + AA
                    763:                      END DO
                    764: *                    i=j-k
                    765:                      AA = ABS( DBLE( A( I+J*LDA ) ) )
                    766: *                    A(j-k,j-k)
                    767:                      S = S + AA
                    768:                      WORK( J-K ) = WORK( J-K ) + S
                    769:                      I = I + 1
                    770:                      S = ABS( DBLE( A( I+J*LDA ) ) )
                    771: *                    A(j,j)
                    772:                      DO L = J + 1, N - 1
                    773:                         I = I + 1
                    774:                         AA = ABS( A( I+J*LDA ) )
                    775: *                       A(j,l)
                    776:                         WORK( L ) = WORK( L ) + AA
                    777:                         S = S + AA
                    778:                      END DO
                    779:                      WORK( J ) = WORK( J ) + S
                    780:                   END DO
                    781:                   I = IDAMAX( N, WORK, 1 )
                    782:                   VALUE = WORK( I-1 )
                    783:                ELSE
                    784: *                 ilu=1 & uplo = 'L'
                    785:                   K = K + 1
                    786: *                 k=(n+1)/2 for n odd and ilu=1
                    787:                   DO I = K, N - 1
                    788:                      WORK( I ) = ZERO
                    789:                   END DO
                    790:                   DO J = 0, K - 2
                    791: *                    process
                    792:                      S = ZERO
                    793:                      DO I = 0, J - 1
                    794:                         AA = ABS( A( I+J*LDA ) )
                    795: *                       A(j,i)
                    796:                         WORK( I ) = WORK( I ) + AA
                    797:                         S = S + AA
                    798:                      END DO
                    799:                      AA = ABS( DBLE( A( I+J*LDA ) ) )
                    800: *                    i=j so process of A(j,j)
                    801:                      S = S + AA
                    802:                      WORK( J ) = S
                    803: *                    is initialised here
                    804:                      I = I + 1
                    805: *                    i=j process A(j+k,j+k)
                    806:                      AA = ABS( DBLE( A( I+J*LDA ) ) )
                    807:                      S = AA
                    808:                      DO L = K + J + 1, N - 1
                    809:                         I = I + 1
                    810:                         AA = ABS( A( I+J*LDA ) )
                    811: *                       A(l,k+j)
                    812:                         S = S + AA
                    813:                         WORK( L ) = WORK( L ) + AA
                    814:                      END DO
                    815:                      WORK( K+J ) = WORK( K+J ) + S
                    816:                   END DO
                    817: *                 j=k-1 is special :process col A(k-1,0:k-1)
                    818:                   S = ZERO
                    819:                   DO I = 0, K - 2
                    820:                      AA = ABS( A( I+J*LDA ) )
                    821: *                    A(k,i)
                    822:                      WORK( I ) = WORK( I ) + AA
                    823:                      S = S + AA
                    824:                   END DO
                    825: *                 i=k-1
                    826:                   AA = ABS( DBLE( A( I+J*LDA ) ) )
                    827: *                 A(k-1,k-1)
                    828:                   S = S + AA
                    829:                   WORK( I ) = S
                    830: *                 done with col j=k+1
                    831:                   DO J = K, N - 1
                    832: *                    process col j of A = A(j,0:k-1)
                    833:                      S = ZERO
                    834:                      DO I = 0, K - 1
                    835:                         AA = ABS( A( I+J*LDA ) )
                    836: *                       A(j,i)
                    837:                         WORK( I ) = WORK( I ) + AA
                    838:                         S = S + AA
                    839:                      END DO
                    840:                      WORK( J ) = WORK( J ) + S
                    841:                   END DO
                    842:                   I = IDAMAX( N, WORK, 1 )
                    843:                   VALUE = WORK( I-1 )
                    844:                END IF
                    845:             ELSE
                    846: *              n is even & A is k=n/2 by n+1
                    847:                IF( ILU.EQ.0 ) THEN
                    848: *                 uplo = 'U'
                    849:                   DO I = K, N - 1
                    850:                      WORK( I ) = ZERO
                    851:                   END DO
                    852:                   DO J = 0, K - 1
                    853:                      S = ZERO
                    854:                      DO I = 0, K - 1
                    855:                         AA = ABS( A( I+J*LDA ) )
                    856: *                       A(j,i+k)
                    857:                         WORK( I+K ) = WORK( I+K ) + AA
                    858:                         S = S + AA
                    859:                      END DO
                    860:                      WORK( J ) = S
                    861:                   END DO
                    862: *                 j=k
                    863:                   AA = ABS( DBLE( A( 0+J*LDA ) ) )
                    864: *                 A(k,k)
                    865:                   S = AA
                    866:                   DO I = 1, K - 1
                    867:                      AA = ABS( A( I+J*LDA ) )
                    868: *                    A(k,k+i)
                    869:                      WORK( I+K ) = WORK( I+K ) + AA
                    870:                      S = S + AA
                    871:                   END DO
                    872:                   WORK( J ) = WORK( J ) + S
                    873:                   DO J = K + 1, N - 1
                    874:                      S = ZERO
                    875:                      DO I = 0, J - 2 - K
                    876:                         AA = ABS( A( I+J*LDA ) )
                    877: *                       A(i,j-k-1)
                    878:                         WORK( I ) = WORK( I ) + AA
                    879:                         S = S + AA
                    880:                      END DO
                    881: *                    i=j-1-k
                    882:                      AA = ABS( DBLE( A( I+J*LDA ) ) )
                    883: *                    A(j-k-1,j-k-1)
                    884:                      S = S + AA
                    885:                      WORK( J-K-1 ) = WORK( J-K-1 ) + S
                    886:                      I = I + 1
                    887:                      AA = ABS( DBLE( A( I+J*LDA ) ) )
                    888: *                    A(j,j)
                    889:                      S = AA
                    890:                      DO L = J + 1, N - 1
                    891:                         I = I + 1
                    892:                         AA = ABS( A( I+J*LDA ) )
                    893: *                       A(j,l)
                    894:                         WORK( L ) = WORK( L ) + AA
                    895:                         S = S + AA
                    896:                      END DO
                    897:                      WORK( J ) = WORK( J ) + S
                    898:                   END DO
                    899: *                 j=n
                    900:                   S = ZERO
                    901:                   DO I = 0, K - 2
                    902:                      AA = ABS( A( I+J*LDA ) )
                    903: *                    A(i,k-1)
                    904:                      WORK( I ) = WORK( I ) + AA
                    905:                      S = S + AA
                    906:                   END DO
                    907: *                 i=k-1
                    908:                   AA = ABS( DBLE( A( I+J*LDA ) ) )
                    909: *                 A(k-1,k-1)
                    910:                   S = S + AA
                    911:                   WORK( I ) = WORK( I ) + S
                    912:                   I = IDAMAX( N, WORK, 1 )
                    913:                   VALUE = WORK( I-1 )
                    914:                ELSE
                    915: *                 ilu=1 & uplo = 'L'
                    916:                   DO I = K, N - 1
                    917:                      WORK( I ) = ZERO
                    918:                   END DO
                    919: *                 j=0 is special :process col A(k:n-1,k)
                    920:                   S = ABS( DBLE( A( 0 ) ) )
                    921: *                 A(k,k)
                    922:                   DO I = 1, K - 1
                    923:                      AA = ABS( A( I ) )
                    924: *                    A(k+i,k)
                    925:                      WORK( I+K ) = WORK( I+K ) + AA
                    926:                      S = S + AA
                    927:                   END DO
                    928:                   WORK( K ) = WORK( K ) + S
                    929:                   DO J = 1, K - 1
                    930: *                    process
                    931:                      S = ZERO
                    932:                      DO I = 0, J - 2
                    933:                         AA = ABS( A( I+J*LDA ) )
                    934: *                       A(j-1,i)
                    935:                         WORK( I ) = WORK( I ) + AA
                    936:                         S = S + AA
                    937:                      END DO
                    938:                      AA = ABS( DBLE( A( I+J*LDA ) ) )
                    939: *                    i=j-1 so process of A(j-1,j-1)
                    940:                      S = S + AA
                    941:                      WORK( J-1 ) = S
                    942: *                    is initialised here
                    943:                      I = I + 1
                    944: *                    i=j process A(j+k,j+k)
                    945:                      AA = ABS( DBLE( A( I+J*LDA ) ) )
                    946:                      S = AA
                    947:                      DO L = K + J + 1, N - 1
                    948:                         I = I + 1
                    949:                         AA = ABS( A( I+J*LDA ) )
                    950: *                       A(l,k+j)
                    951:                         S = S + AA
                    952:                         WORK( L ) = WORK( L ) + AA
                    953:                      END DO
                    954:                      WORK( K+J ) = WORK( K+J ) + S
                    955:                   END DO
                    956: *                 j=k is special :process col A(k,0:k-1)
                    957:                   S = ZERO
                    958:                   DO I = 0, K - 2
                    959:                      AA = ABS( A( I+J*LDA ) )
                    960: *                    A(k,i)
                    961:                      WORK( I ) = WORK( I ) + AA
                    962:                      S = S + AA
                    963:                   END DO
                    964: *
                    965: *                 i=k-1
                    966:                   AA = ABS( DBLE( A( I+J*LDA ) ) )
                    967: *                 A(k-1,k-1)
                    968:                   S = S + AA
                    969:                   WORK( I ) = S
                    970: *                 done with col j=k+1
                    971:                   DO J = K + 1, N
                    972: *
                    973: *                    process col j-1 of A = A(j-1,0:k-1)
                    974:                      S = ZERO
                    975:                      DO I = 0, K - 1
                    976:                         AA = ABS( A( I+J*LDA ) )
                    977: *                       A(j-1,i)
                    978:                         WORK( I ) = WORK( I ) + AA
                    979:                         S = S + AA
                    980:                      END DO
                    981:                      WORK( J-1 ) = WORK( J-1 ) + S
                    982:                   END DO
                    983:                   I = IDAMAX( N, WORK, 1 )
                    984:                   VALUE = WORK( I-1 )
                    985:                END IF
                    986:             END IF
                    987:          END IF
                    988:       ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
                    989: *
                    990: *       Find normF(A).
                    991: *
                    992:          K = ( N+1 ) / 2
                    993:          SCALE = ZERO
                    994:          S = ONE
                    995:          IF( NOE.EQ.1 ) THEN
                    996: *           n is odd
                    997:             IF( IFM.EQ.1 ) THEN
                    998: *              A is normal & A is n by k
                    999:                IF( ILU.EQ.0 ) THEN
                   1000: *                 A is upper
                   1001:                   DO J = 0, K - 3
                   1002:                      CALL ZLASSQ( K-J-2, A( K+J+1+J*LDA ), 1, SCALE, S )
                   1003: *                    L at A(k,0)
                   1004:                   END DO
                   1005:                   DO J = 0, K - 1
                   1006:                      CALL ZLASSQ( K+J-1, A( 0+J*LDA ), 1, SCALE, S )
                   1007: *                    trap U at A(0,0)
                   1008:                   END DO
                   1009:                   S = S + S
                   1010: *                 double s for the off diagonal elements
                   1011:                   L = K - 1
                   1012: *                 -> U(k,k) at A(k-1,0)
                   1013:                   DO I = 0, K - 2
                   1014:                      AA = DBLE( A( L ) )
                   1015: *                    U(k+i,k+i)
                   1016:                      IF( AA.NE.ZERO ) THEN
                   1017:                         IF( SCALE.LT.AA ) THEN
                   1018:                            S = ONE + S*( SCALE / AA )**2
                   1019:                            SCALE = AA
                   1020:                         ELSE
                   1021:                            S = S + ( AA / SCALE )**2
                   1022:                         END IF
                   1023:                      END IF
                   1024:                      AA = DBLE( A( L+1 ) )
                   1025: *                    U(i,i)
                   1026:                      IF( AA.NE.ZERO ) THEN
                   1027:                         IF( SCALE.LT.AA ) THEN
                   1028:                            S = ONE + S*( SCALE / AA )**2
                   1029:                            SCALE = AA
                   1030:                         ELSE
                   1031:                            S = S + ( AA / SCALE )**2
                   1032:                         END IF
                   1033:                      END IF
                   1034:                      L = L + LDA + 1
                   1035:                   END DO
                   1036:                   AA = DBLE( A( L ) )
                   1037: *                 U(n-1,n-1)
                   1038:                   IF( AA.NE.ZERO ) THEN
                   1039:                      IF( SCALE.LT.AA ) THEN
                   1040:                         S = ONE + S*( SCALE / AA )**2
                   1041:                         SCALE = AA
                   1042:                      ELSE
                   1043:                         S = S + ( AA / SCALE )**2
                   1044:                      END IF
                   1045:                   END IF
                   1046:                ELSE
                   1047: *                 ilu=1 & A is lower
                   1048:                   DO J = 0, K - 1
                   1049:                      CALL ZLASSQ( N-J-1, A( J+1+J*LDA ), 1, SCALE, S )
                   1050: *                    trap L at A(0,0)
                   1051:                   END DO
                   1052:                   DO J = 1, K - 2
                   1053:                      CALL ZLASSQ( J, A( 0+( 1+J )*LDA ), 1, SCALE, S )
                   1054: *                    U at A(0,1)
                   1055:                   END DO
                   1056:                   S = S + S
                   1057: *                 double s for the off diagonal elements
                   1058:                   AA = DBLE( A( 0 ) )
                   1059: *                 L(0,0) at A(0,0)
                   1060:                   IF( AA.NE.ZERO ) THEN
                   1061:                      IF( SCALE.LT.AA ) THEN
                   1062:                         S = ONE + S*( SCALE / AA )**2
                   1063:                         SCALE = AA
                   1064:                      ELSE
                   1065:                         S = S + ( AA / SCALE )**2
                   1066:                      END IF
                   1067:                   END IF
                   1068:                   L = LDA
                   1069: *                 -> L(k,k) at A(0,1)
                   1070:                   DO I = 1, K - 1
                   1071:                      AA = DBLE( A( L ) )
                   1072: *                    L(k-1+i,k-1+i)
                   1073:                      IF( AA.NE.ZERO ) THEN
                   1074:                         IF( SCALE.LT.AA ) THEN
                   1075:                            S = ONE + S*( SCALE / AA )**2
                   1076:                            SCALE = AA
                   1077:                         ELSE
                   1078:                            S = S + ( AA / SCALE )**2
                   1079:                         END IF
                   1080:                      END IF
                   1081:                      AA = DBLE( A( L+1 ) )
                   1082: *                    L(i,i)
                   1083:                      IF( AA.NE.ZERO ) THEN
                   1084:                         IF( SCALE.LT.AA ) THEN
                   1085:                            S = ONE + S*( SCALE / AA )**2
                   1086:                            SCALE = AA
                   1087:                         ELSE
                   1088:                            S = S + ( AA / SCALE )**2
                   1089:                         END IF
                   1090:                      END IF
                   1091:                      L = L + LDA + 1
                   1092:                   END DO
                   1093:                END IF
                   1094:             ELSE
                   1095: *              A is xpose & A is k by n
                   1096:                IF( ILU.EQ.0 ) THEN
1.5       bertrand 1097: *                 A**H is upper
1.1       bertrand 1098:                   DO J = 1, K - 2
                   1099:                      CALL ZLASSQ( J, A( 0+( K+J )*LDA ), 1, SCALE, S )
                   1100: *                    U at A(0,k)
                   1101:                   END DO
                   1102:                   DO J = 0, K - 2
                   1103:                      CALL ZLASSQ( K, A( 0+J*LDA ), 1, SCALE, S )
                   1104: *                    k by k-1 rect. at A(0,0)
                   1105:                   END DO
                   1106:                   DO J = 0, K - 2
                   1107:                      CALL ZLASSQ( K-J-1, A( J+1+( J+K-1 )*LDA ), 1,
1.5       bertrand 1108:      $                            SCALE, S )
1.1       bertrand 1109: *                    L at A(0,k-1)
                   1110:                   END DO
                   1111:                   S = S + S
                   1112: *                 double s for the off diagonal elements
                   1113:                   L = 0 + K*LDA - LDA
                   1114: *                 -> U(k-1,k-1) at A(0,k-1)
                   1115:                   AA = DBLE( A( L ) )
                   1116: *                 U(k-1,k-1)
                   1117:                   IF( AA.NE.ZERO ) THEN
                   1118:                      IF( SCALE.LT.AA ) THEN
                   1119:                         S = ONE + S*( SCALE / AA )**2
                   1120:                         SCALE = AA
                   1121:                      ELSE
                   1122:                         S = S + ( AA / SCALE )**2
                   1123:                      END IF
                   1124:                   END IF
                   1125:                   L = L + LDA
                   1126: *                 -> U(0,0) at A(0,k)
                   1127:                   DO J = K, N - 1
                   1128:                      AA = DBLE( A( L ) )
                   1129: *                    -> U(j-k,j-k)
                   1130:                      IF( AA.NE.ZERO ) THEN
                   1131:                         IF( SCALE.LT.AA ) THEN
                   1132:                            S = ONE + S*( SCALE / AA )**2
                   1133:                            SCALE = AA
                   1134:                         ELSE
                   1135:                            S = S + ( AA / SCALE )**2
                   1136:                         END IF
                   1137:                      END IF
                   1138:                      AA = DBLE( A( L+1 ) )
                   1139: *                    -> U(j,j)
                   1140:                      IF( AA.NE.ZERO ) THEN
                   1141:                         IF( SCALE.LT.AA ) THEN
                   1142:                            S = ONE + S*( SCALE / AA )**2
                   1143:                            SCALE = AA
                   1144:                         ELSE
                   1145:                            S = S + ( AA / SCALE )**2
                   1146:                         END IF
                   1147:                      END IF
                   1148:                      L = L + LDA + 1
                   1149:                   END DO
                   1150:                ELSE
1.5       bertrand 1151: *                 A**H is lower
1.1       bertrand 1152:                   DO J = 1, K - 1
                   1153:                      CALL ZLASSQ( J, A( 0+J*LDA ), 1, SCALE, S )
                   1154: *                    U at A(0,0)
                   1155:                   END DO
                   1156:                   DO J = K, N - 1
                   1157:                      CALL ZLASSQ( K, A( 0+J*LDA ), 1, SCALE, S )
                   1158: *                    k by k-1 rect. at A(0,k)
                   1159:                   END DO
                   1160:                   DO J = 0, K - 3
                   1161:                      CALL ZLASSQ( K-J-2, A( J+2+J*LDA ), 1, SCALE, S )
                   1162: *                    L at A(1,0)
                   1163:                   END DO
                   1164:                   S = S + S
                   1165: *                 double s for the off diagonal elements
                   1166:                   L = 0
                   1167: *                 -> L(0,0) at A(0,0)
                   1168:                   DO I = 0, K - 2
                   1169:                      AA = DBLE( A( L ) )
                   1170: *                    L(i,i)
                   1171:                      IF( AA.NE.ZERO ) THEN
                   1172:                         IF( SCALE.LT.AA ) THEN
                   1173:                            S = ONE + S*( SCALE / AA )**2
                   1174:                            SCALE = AA
                   1175:                         ELSE
                   1176:                            S = S + ( AA / SCALE )**2
                   1177:                         END IF
                   1178:                      END IF
                   1179:                      AA = DBLE( A( L+1 ) )
                   1180: *                    L(k+i,k+i)
                   1181:                      IF( AA.NE.ZERO ) THEN
                   1182:                         IF( SCALE.LT.AA ) THEN
                   1183:                            S = ONE + S*( SCALE / AA )**2
                   1184:                            SCALE = AA
                   1185:                         ELSE
                   1186:                            S = S + ( AA / SCALE )**2
                   1187:                         END IF
                   1188:                      END IF
                   1189:                      L = L + LDA + 1
                   1190:                   END DO
                   1191: *                 L-> k-1 + (k-1)*lda or L(k-1,k-1) at A(k-1,k-1)
                   1192:                   AA = DBLE( A( L ) )
                   1193: *                 L(k-1,k-1) at A(k-1,k-1)
                   1194:                   IF( AA.NE.ZERO ) THEN
                   1195:                      IF( SCALE.LT.AA ) THEN
                   1196:                         S = ONE + S*( SCALE / AA )**2
                   1197:                         SCALE = AA
                   1198:                      ELSE
                   1199:                         S = S + ( AA / SCALE )**2
                   1200:                      END IF
                   1201:                   END IF
                   1202:                END IF
                   1203:             END IF
                   1204:          ELSE
                   1205: *           n is even
                   1206:             IF( IFM.EQ.1 ) THEN
                   1207: *              A is normal
                   1208:                IF( ILU.EQ.0 ) THEN
                   1209: *                 A is upper
                   1210:                   DO J = 0, K - 2
                   1211:                      CALL ZLASSQ( K-J-1, A( K+J+2+J*LDA ), 1, SCALE, S )
                   1212: *                 L at A(k+1,0)
                   1213:                   END DO
                   1214:                   DO J = 0, K - 1
                   1215:                      CALL ZLASSQ( K+J, A( 0+J*LDA ), 1, SCALE, S )
                   1216: *                 trap U at A(0,0)
                   1217:                   END DO
                   1218:                   S = S + S
                   1219: *                 double s for the off diagonal elements
                   1220:                   L = K
                   1221: *                 -> U(k,k) at A(k,0)
                   1222:                   DO I = 0, K - 1
                   1223:                      AA = DBLE( A( L ) )
                   1224: *                    U(k+i,k+i)
                   1225:                      IF( AA.NE.ZERO ) THEN
                   1226:                         IF( SCALE.LT.AA ) THEN
                   1227:                            S = ONE + S*( SCALE / AA )**2
                   1228:                            SCALE = AA
                   1229:                         ELSE
                   1230:                            S = S + ( AA / SCALE )**2
                   1231:                         END IF
                   1232:                      END IF
                   1233:                      AA = DBLE( A( L+1 ) )
                   1234: *                    U(i,i)
                   1235:                      IF( AA.NE.ZERO ) THEN
                   1236:                         IF( SCALE.LT.AA ) THEN
                   1237:                            S = ONE + S*( SCALE / AA )**2
                   1238:                            SCALE = AA
                   1239:                         ELSE
                   1240:                            S = S + ( AA / SCALE )**2
                   1241:                         END IF
                   1242:                      END IF
                   1243:                      L = L + LDA + 1
                   1244:                   END DO
                   1245:                ELSE
                   1246: *                 ilu=1 & A is lower
                   1247:                   DO J = 0, K - 1
                   1248:                      CALL ZLASSQ( N-J-1, A( J+2+J*LDA ), 1, SCALE, S )
                   1249: *                    trap L at A(1,0)
                   1250:                   END DO
                   1251:                   DO J = 1, K - 1
                   1252:                      CALL ZLASSQ( J, A( 0+J*LDA ), 1, SCALE, S )
                   1253: *                    U at A(0,0)
                   1254:                   END DO
                   1255:                   S = S + S
                   1256: *                 double s for the off diagonal elements
                   1257:                   L = 0
                   1258: *                 -> L(k,k) at A(0,0)
                   1259:                   DO I = 0, K - 1
                   1260:                      AA = DBLE( A( L ) )
                   1261: *                    L(k-1+i,k-1+i)
                   1262:                      IF( AA.NE.ZERO ) THEN
                   1263:                         IF( SCALE.LT.AA ) THEN
                   1264:                            S = ONE + S*( SCALE / AA )**2
                   1265:                            SCALE = AA
                   1266:                         ELSE
                   1267:                            S = S + ( AA / SCALE )**2
                   1268:                         END IF
                   1269:                      END IF
                   1270:                      AA = DBLE( A( L+1 ) )
                   1271: *                    L(i,i)
                   1272:                      IF( AA.NE.ZERO ) THEN
                   1273:                         IF( SCALE.LT.AA ) THEN
                   1274:                            S = ONE + S*( SCALE / AA )**2
                   1275:                            SCALE = AA
                   1276:                         ELSE
                   1277:                            S = S + ( AA / SCALE )**2
                   1278:                         END IF
                   1279:                      END IF
                   1280:                      L = L + LDA + 1
                   1281:                   END DO
                   1282:                END IF
                   1283:             ELSE
                   1284: *              A is xpose
                   1285:                IF( ILU.EQ.0 ) THEN
1.5       bertrand 1286: *                 A**H is upper
1.1       bertrand 1287:                   DO J = 1, K - 1
                   1288:                      CALL ZLASSQ( J, A( 0+( K+1+J )*LDA ), 1, SCALE, S )
                   1289: *                 U at A(0,k+1)
                   1290:                   END DO
                   1291:                   DO J = 0, K - 1
                   1292:                      CALL ZLASSQ( K, A( 0+J*LDA ), 1, SCALE, S )
                   1293: *                 k by k rect. at A(0,0)
                   1294:                   END DO
                   1295:                   DO J = 0, K - 2
                   1296:                      CALL ZLASSQ( K-J-1, A( J+1+( J+K )*LDA ), 1, SCALE,
1.5       bertrand 1297:      $                            S )
1.1       bertrand 1298: *                 L at A(0,k)
                   1299:                   END DO
                   1300:                   S = S + S
                   1301: *                 double s for the off diagonal elements
                   1302:                   L = 0 + K*LDA
                   1303: *                 -> U(k,k) at A(0,k)
                   1304:                   AA = DBLE( A( L ) )
                   1305: *                 U(k,k)
                   1306:                   IF( AA.NE.ZERO ) THEN
                   1307:                      IF( SCALE.LT.AA ) THEN
                   1308:                         S = ONE + S*( SCALE / AA )**2
                   1309:                         SCALE = AA
                   1310:                      ELSE
                   1311:                         S = S + ( AA / SCALE )**2
                   1312:                      END IF
                   1313:                   END IF
                   1314:                   L = L + LDA
                   1315: *                 -> U(0,0) at A(0,k+1)
                   1316:                   DO J = K + 1, N - 1
                   1317:                      AA = DBLE( A( L ) )
                   1318: *                    -> U(j-k-1,j-k-1)
                   1319:                      IF( AA.NE.ZERO ) THEN
                   1320:                         IF( SCALE.LT.AA ) THEN
                   1321:                            S = ONE + S*( SCALE / AA )**2
                   1322:                            SCALE = AA
                   1323:                         ELSE
                   1324:                            S = S + ( AA / SCALE )**2
                   1325:                         END IF
                   1326:                      END IF
                   1327:                      AA = DBLE( A( L+1 ) )
                   1328: *                    -> U(j,j)
                   1329:                      IF( AA.NE.ZERO ) THEN
                   1330:                         IF( SCALE.LT.AA ) THEN
                   1331:                            S = ONE + S*( SCALE / AA )**2
                   1332:                            SCALE = AA
                   1333:                         ELSE
                   1334:                            S = S + ( AA / SCALE )**2
                   1335:                         END IF
                   1336:                      END IF
                   1337:                      L = L + LDA + 1
                   1338:                   END DO
                   1339: *                 L=k-1+n*lda
                   1340: *                 -> U(k-1,k-1) at A(k-1,n)
                   1341:                   AA = DBLE( A( L ) )
                   1342: *                 U(k,k)
                   1343:                   IF( AA.NE.ZERO ) THEN
                   1344:                      IF( SCALE.LT.AA ) THEN
                   1345:                         S = ONE + S*( SCALE / AA )**2
                   1346:                         SCALE = AA
                   1347:                      ELSE
                   1348:                         S = S + ( AA / SCALE )**2
                   1349:                      END IF
                   1350:                   END IF
                   1351:                ELSE
1.5       bertrand 1352: *                 A**H is lower
1.1       bertrand 1353:                   DO J = 1, K - 1
                   1354:                      CALL ZLASSQ( J, A( 0+( J+1 )*LDA ), 1, SCALE, S )
                   1355: *                 U at A(0,1)
                   1356:                   END DO
                   1357:                   DO J = K + 1, N
                   1358:                      CALL ZLASSQ( K, A( 0+J*LDA ), 1, SCALE, S )
                   1359: *                 k by k rect. at A(0,k+1)
                   1360:                   END DO
                   1361:                   DO J = 0, K - 2
                   1362:                      CALL ZLASSQ( K-J-1, A( J+1+J*LDA ), 1, SCALE, S )
                   1363: *                 L at A(0,0)
                   1364:                   END DO
                   1365:                   S = S + S
                   1366: *                 double s for the off diagonal elements
                   1367:                   L = 0
                   1368: *                 -> L(k,k) at A(0,0)
                   1369:                   AA = DBLE( A( L ) )
                   1370: *                 L(k,k) at A(0,0)
                   1371:                   IF( AA.NE.ZERO ) THEN
                   1372:                      IF( SCALE.LT.AA ) THEN
                   1373:                         S = ONE + S*( SCALE / AA )**2
                   1374:                         SCALE = AA
                   1375:                      ELSE
                   1376:                         S = S + ( AA / SCALE )**2
                   1377:                      END IF
                   1378:                   END IF
                   1379:                   L = LDA
                   1380: *                 -> L(0,0) at A(0,1)
                   1381:                   DO I = 0, K - 2
                   1382:                      AA = DBLE( A( L ) )
                   1383: *                    L(i,i)
                   1384:                      IF( AA.NE.ZERO ) THEN
                   1385:                         IF( SCALE.LT.AA ) THEN
                   1386:                            S = ONE + S*( SCALE / AA )**2
                   1387:                            SCALE = AA
                   1388:                         ELSE
                   1389:                            S = S + ( AA / SCALE )**2
                   1390:                         END IF
                   1391:                      END IF
                   1392:                      AA = DBLE( A( L+1 ) )
                   1393: *                    L(k+i+1,k+i+1)
                   1394:                      IF( AA.NE.ZERO ) THEN
                   1395:                         IF( SCALE.LT.AA ) THEN
                   1396:                            S = ONE + S*( SCALE / AA )**2
                   1397:                            SCALE = AA
                   1398:                         ELSE
                   1399:                            S = S + ( AA / SCALE )**2
                   1400:                         END IF
                   1401:                      END IF
                   1402:                      L = L + LDA + 1
                   1403:                   END DO
                   1404: *                 L-> k - 1 + k*lda or L(k-1,k-1) at A(k-1,k)
                   1405:                   AA = DBLE( A( L ) )
                   1406: *                 L(k-1,k-1) at A(k-1,k)
                   1407:                   IF( AA.NE.ZERO ) THEN
                   1408:                      IF( SCALE.LT.AA ) THEN
                   1409:                         S = ONE + S*( SCALE / AA )**2
                   1410:                         SCALE = AA
                   1411:                      ELSE
                   1412:                         S = S + ( AA / SCALE )**2
                   1413:                      END IF
                   1414:                   END IF
                   1415:                END IF
                   1416:             END IF
                   1417:          END IF
                   1418:          VALUE = SCALE*SQRT( S )
                   1419:       END IF
                   1420: *
                   1421:       ZLANHF = VALUE
                   1422:       RETURN
                   1423: *
                   1424: *     End of ZLANHF
                   1425: *
                   1426:       END

CVSweb interface <joel.bertrand@systella.fr>