Diff for /rpl/lapack/lapack/zlangb.f between versions 1.7 and 1.18

version 1.7, 2010/12/21 13:53:50 version 1.18, 2020/05/21 21:46:07
Line 1 Line 1
   *> \brief \b ZLANGB returns the value of the 1-norm, Frobenius norm, infinity-norm, or the largest absolute value of any element of general band matrix.
   *
   *  =========== DOCUMENTATION ===========
   *
   * Online html documentation available at
   *            http://www.netlib.org/lapack/explore-html/
   *
   *> \htmlonly
   *> Download ZLANGB + dependencies
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlangb.f">
   *> [TGZ]</a>
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlangb.f">
   *> [ZIP]</a>
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlangb.f">
   *> [TXT]</a>
   *> \endhtmlonly
   *
   *  Definition:
   *  ===========
   *
   *       DOUBLE PRECISION FUNCTION ZLANGB( NORM, N, KL, KU, AB, LDAB,
   *                        WORK )
   *
   *       .. Scalar Arguments ..
   *       CHARACTER          NORM
   *       INTEGER            KL, KU, LDAB, N
   *       ..
   *       .. Array Arguments ..
   *       DOUBLE PRECISION   WORK( * )
   *       COMPLEX*16         AB( LDAB, * )
   *       ..
   *
   *
   *> \par Purpose:
   *  =============
   *>
   *> \verbatim
   *>
   *> ZLANGB  returns the value of the one norm,  or the Frobenius norm, or
   *> the  infinity norm,  or the element of  largest absolute value  of an
   *> n by n band matrix  A,  with kl sub-diagonals and ku super-diagonals.
   *> \endverbatim
   *>
   *> \return ZLANGB
   *> \verbatim
   *>
   *>    ZLANGB = ( max(abs(A(i,j))), NORM = 'M' or 'm'
   *>             (
   *>             ( norm1(A),         NORM = '1', 'O' or 'o'
   *>             (
   *>             ( normI(A),         NORM = 'I' or 'i'
   *>             (
   *>             ( normF(A),         NORM = 'F', 'f', 'E' or 'e'
   *>
   *> where  norm1  denotes the  one norm of a matrix (maximum column sum),
   *> normI  denotes the  infinity norm  of a matrix  (maximum row sum) and
   *> normF  denotes the  Frobenius norm of a matrix (square root of sum of
   *> squares).  Note that  max(abs(A(i,j)))  is not a consistent matrix norm.
   *> \endverbatim
   *
   *  Arguments:
   *  ==========
   *
   *> \param[in] NORM
   *> \verbatim
   *>          NORM is CHARACTER*1
   *>          Specifies the value to be returned in ZLANGB as described
   *>          above.
   *> \endverbatim
   *>
   *> \param[in] N
   *> \verbatim
   *>          N is INTEGER
   *>          The order of the matrix A.  N >= 0.  When N = 0, ZLANGB is
   *>          set to zero.
   *> \endverbatim
   *>
   *> \param[in] KL
   *> \verbatim
   *>          KL is INTEGER
   *>          The number of sub-diagonals of the matrix A.  KL >= 0.
   *> \endverbatim
   *>
   *> \param[in] KU
   *> \verbatim
   *>          KU is INTEGER
   *>          The number of super-diagonals of the matrix A.  KU >= 0.
   *> \endverbatim
   *>
   *> \param[in] AB
   *> \verbatim
   *>          AB is COMPLEX*16 array, dimension (LDAB,N)
   *>          The band matrix A, stored in rows 1 to KL+KU+1.  The j-th
   *>          column of A is stored in the j-th column of the array AB as
   *>          follows:
   *>          AB(ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(n,j+kl).
   *> \endverbatim
   *>
   *> \param[in] LDAB
   *> \verbatim
   *>          LDAB is INTEGER
   *>          The leading dimension of the array AB.  LDAB >= KL+KU+1.
   *> \endverbatim
   *>
   *> \param[out] WORK
   *> \verbatim
   *>          WORK is DOUBLE PRECISION array, dimension (MAX(1,LWORK)),
   *>          where LWORK >= N when NORM = 'I'; otherwise, WORK is not
   *>          referenced.
   *> \endverbatim
   *
   *  Authors:
   *  ========
   *
   *> \author Univ. of Tennessee
   *> \author Univ. of California Berkeley
   *> \author Univ. of Colorado Denver
   *> \author NAG Ltd.
   *
   *> \date December 2016
   *
   *> \ingroup complex16GBauxiliary
   *
   *  =====================================================================
       DOUBLE PRECISION FUNCTION ZLANGB( NORM, N, KL, KU, AB, LDAB,        DOUBLE PRECISION FUNCTION ZLANGB( NORM, N, KL, KU, AB, LDAB,
      $                 WORK )       $                 WORK )
 *  *
 *  -- LAPACK auxiliary routine (version 3.2) --  *  -- LAPACK auxiliary routine (version 3.7.0) --
 *  -- LAPACK is a software package provided by Univ. of Tennessee,    --  *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
 *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--  *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
 *     November 2006  *     December 2016
 *  *
         IMPLICIT NONE
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       CHARACTER          NORM        CHARACTER          NORM
       INTEGER            KL, KU, LDAB, N        INTEGER            KL, KU, LDAB, N
Line 15 Line 140
       COMPLEX*16         AB( LDAB, * )        COMPLEX*16         AB( LDAB, * )
 *     ..  *     ..
 *  *
 *  Purpose  
 *  =======  
 *  
 *  ZLANGB  returns the value of the one norm,  or the Frobenius norm, or  
 *  the  infinity norm,  or the element of  largest absolute value  of an  
 *  n by n band matrix  A,  with kl sub-diagonals and ku super-diagonals.  
 *  
 *  Description  
 *  ===========  
 *  
 *  ZLANGB returns the value  
 *  
 *     ZLANGB = ( max(abs(A(i,j))), NORM = 'M' or 'm'  
 *              (  
 *              ( norm1(A),         NORM = '1', 'O' or 'o'  
 *              (  
 *              ( normI(A),         NORM = 'I' or 'i'  
 *              (  
 *              ( normF(A),         NORM = 'F', 'f', 'E' or 'e'  
 *  
 *  where  norm1  denotes the  one norm of a matrix (maximum column sum),  
 *  normI  denotes the  infinity norm  of a matrix  (maximum row sum) and  
 *  normF  denotes the  Frobenius norm of a matrix (square root of sum of  
 *  squares).  Note that  max(abs(A(i,j)))  is not a consistent matrix norm.  
 *  
 *  Arguments  
 *  =========  
 *  
 *  NORM    (input) CHARACTER*1  
 *          Specifies the value to be returned in ZLANGB as described  
 *          above.  
 *  
 *  N       (input) INTEGER  
 *          The order of the matrix A.  N >= 0.  When N = 0, ZLANGB is  
 *          set to zero.  
 *  
 *  KL      (input) INTEGER  
 *          The number of sub-diagonals of the matrix A.  KL >= 0.  
 *  
 *  KU      (input) INTEGER  
 *          The number of super-diagonals of the matrix A.  KU >= 0.  
 *  
 *  AB      (input) COMPLEX*16 array, dimension (LDAB,N)  
 *          The band matrix A, stored in rows 1 to KL+KU+1.  The j-th  
 *          column of A is stored in the j-th column of the array AB as  
 *          follows:  
 *          AB(ku+1+i-j,j) = A(i,j) for max(1,j-ku)<=i<=min(n,j+kl).  
 *  
 *  LDAB    (input) INTEGER  
 *          The leading dimension of the array AB.  LDAB >= KL+KU+1.  
 *  
 *  WORK    (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK)),  
 *          where LWORK >= N when NORM = 'I'; otherwise, WORK is not  
 *          referenced.  
 *  
 * =====================================================================  * =====================================================================
 *  *
 *     .. Parameters ..  *     .. Parameters ..
Line 78 Line 148
 *     ..  *     ..
 *     .. Local Scalars ..  *     .. Local Scalars ..
       INTEGER            I, J, K, L        INTEGER            I, J, K, L
       DOUBLE PRECISION   SCALE, SUM, VALUE        DOUBLE PRECISION   SUM, VALUE, TEMP
   *     ..
   *     .. Local Arrays ..
         DOUBLE PRECISION   SSQ( 2 ), COLSSQ( 2 )
 *     ..  *     ..
 *     .. External Functions ..  *     .. External Functions ..
       LOGICAL            LSAME        LOGICAL            LSAME, DISNAN
       EXTERNAL           LSAME        EXTERNAL           LSAME, DISNAN
 *     ..  *     ..
 *     .. External Subroutines ..  *     .. External Subroutines ..
       EXTERNAL           ZLASSQ        EXTERNAL           ZLASSQ, DCOMBSSQ
 *     ..  *     ..
 *     .. Intrinsic Functions ..  *     .. Intrinsic Functions ..
       INTRINSIC          ABS, MAX, MIN, SQRT        INTRINSIC          ABS, MAX, MIN, SQRT
Line 101 Line 174
          VALUE = ZERO           VALUE = ZERO
          DO 20 J = 1, N           DO 20 J = 1, N
             DO 10 I = MAX( KU+2-J, 1 ), MIN( N+KU+1-J, KL+KU+1 )              DO 10 I = MAX( KU+2-J, 1 ), MIN( N+KU+1-J, KL+KU+1 )
                VALUE = MAX( VALUE, ABS( AB( I, J ) ) )                 TEMP = ABS( AB( I, J ) )
                  IF( VALUE.LT.TEMP .OR. DISNAN( TEMP ) ) VALUE = TEMP
    10       CONTINUE     10       CONTINUE
    20    CONTINUE     20    CONTINUE
       ELSE IF( ( LSAME( NORM, 'O' ) ) .OR. ( NORM.EQ.'1' ) ) THEN        ELSE IF( ( LSAME( NORM, 'O' ) ) .OR. ( NORM.EQ.'1' ) ) THEN
Line 114 Line 188
             DO 30 I = MAX( KU+2-J, 1 ), MIN( N+KU+1-J, KL+KU+1 )              DO 30 I = MAX( KU+2-J, 1 ), MIN( N+KU+1-J, KL+KU+1 )
                SUM = SUM + ABS( AB( I, J ) )                 SUM = SUM + ABS( AB( I, J ) )
    30       CONTINUE     30       CONTINUE
             VALUE = MAX( VALUE, SUM )              IF( VALUE.LT.SUM .OR. DISNAN( SUM ) ) VALUE = SUM
    40    CONTINUE     40    CONTINUE
       ELSE IF( LSAME( NORM, 'I' ) ) THEN        ELSE IF( LSAME( NORM, 'I' ) ) THEN
 *  *
Line 131 Line 205
    70    CONTINUE     70    CONTINUE
          VALUE = ZERO           VALUE = ZERO
          DO 80 I = 1, N           DO 80 I = 1, N
             VALUE = MAX( VALUE, WORK( I ) )              TEMP = WORK( I )
               IF( VALUE.LT.TEMP .OR. DISNAN( TEMP ) ) VALUE = TEMP
    80    CONTINUE     80    CONTINUE
       ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN        ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN
 *  *
 *        Find normF(A).  *        Find normF(A).
   *        SSQ(1) is scale
   *        SSQ(2) is sum-of-squares
   *        For better accuracy, sum each column separately.
 *  *
          SCALE = ZERO           SSQ( 1 ) = ZERO
          SUM = ONE           SSQ( 2 ) = ONE
          DO 90 J = 1, N           DO 90 J = 1, N
             L = MAX( 1, J-KU )              L = MAX( 1, J-KU )
             K = KU + 1 - J + L              K = KU + 1 - J + L
             CALL ZLASSQ( MIN( N, J+KL )-L+1, AB( K, J ), 1, SCALE, SUM )              COLSSQ( 1 ) = ZERO
               COLSSQ( 2 ) = ONE
               CALL ZLASSQ( MIN( N, J+KL )-L+1, AB( K, J ), 1,
        $                   COLSSQ( 1 ), COLSSQ( 2 ) )
               CALL DCOMBSSQ( SSQ, COLSSQ )
    90    CONTINUE     90    CONTINUE
          VALUE = SCALE*SQRT( SUM )           VALUE = SSQ( 1 )*SQRT( SSQ( 2 ) )
       END IF        END IF
 *  *
       ZLANGB = VALUE        ZLANGB = VALUE

Removed from v.1.7  
changed lines
  Added in v.1.18


CVSweb interface <joel.bertrand@systella.fr>