Diff for /rpl/lapack/lapack/zlatrs.f between versions 1.8 and 1.20

version 1.8, 2011/11/21 20:43:18 version 1.20, 2023/08/07 08:39:32
Line 1 Line 1
 *> \brief \b ZLATRS  *> \brief \b ZLATRS solves a triangular system of equations with the scale factor set to prevent overflow.
 *  *
 *  =========== DOCUMENTATION ===========  *  =========== DOCUMENTATION ===========
 *  *
 * Online html documentation available at   * Online html documentation available at
 *            http://www.netlib.org/lapack/explore-html/   *            http://www.netlib.org/lapack/explore-html/
 *  *
 *> \htmlonly  *> \htmlonly
 *> Download ZLATRS + dependencies   *> Download ZLATRS + dependencies
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlatrs.f">   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zlatrs.f">
 *> [TGZ]</a>   *> [TGZ]</a>
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlatrs.f">   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zlatrs.f">
 *> [ZIP]</a>   *> [ZIP]</a>
 *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlatrs.f">   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zlatrs.f">
 *> [TXT]</a>  *> [TXT]</a>
 *> \endhtmlonly   *> \endhtmlonly
 *  *
 *  Definition:  *  Definition:
 *  ===========  *  ===========
 *  *
 *       SUBROUTINE ZLATRS( UPLO, TRANS, DIAG, NORMIN, N, A, LDA, X, SCALE,  *       SUBROUTINE ZLATRS( UPLO, TRANS, DIAG, NORMIN, N, A, LDA, X, SCALE,
 *                          CNORM, INFO )  *                          CNORM, INFO )
 *   *
 *       .. Scalar Arguments ..  *       .. Scalar Arguments ..
 *       CHARACTER          DIAG, NORMIN, TRANS, UPLO  *       CHARACTER          DIAG, NORMIN, TRANS, UPLO
 *       INTEGER            INFO, LDA, N  *       INTEGER            INFO, LDA, N
Line 30 Line 30
 *       DOUBLE PRECISION   CNORM( * )  *       DOUBLE PRECISION   CNORM( * )
 *       COMPLEX*16         A( LDA, * ), X( * )  *       COMPLEX*16         A( LDA, * ), X( * )
 *       ..  *       ..
 *    *
 *  *
 *> \par Purpose:  *> \par Purpose:
 *  =============  *  =============
Line 131 Line 131
 *>  *>
 *> \param[in,out] CNORM  *> \param[in,out] CNORM
 *> \verbatim  *> \verbatim
 *>          CNORM is or output) DOUBLE PRECISION array, dimension (N)  *>          CNORM is DOUBLE PRECISION array, dimension (N)
 *>  *>
 *>          If NORMIN = 'Y', CNORM is an input argument and CNORM(j)  *>          If NORMIN = 'Y', CNORM is an input argument and CNORM(j)
 *>          contains the norm of the off-diagonal part of the j-th column  *>          contains the norm of the off-diagonal part of the j-th column
Line 154 Line 154
 *  Authors:  *  Authors:
 *  ========  *  ========
 *  *
 *> \author Univ. of Tennessee   *> \author Univ. of Tennessee
 *> \author Univ. of California Berkeley   *> \author Univ. of California Berkeley
 *> \author Univ. of Colorado Denver   *> \author Univ. of Colorado Denver
 *> \author NAG Ltd.   *> \author NAG Ltd.
 *  
 *> \date November 2011  
 *  *
 *> \ingroup complex16OTHERauxiliary  *> \ingroup complex16OTHERauxiliary
 *  *
Line 239 Line 237
       SUBROUTINE ZLATRS( UPLO, TRANS, DIAG, NORMIN, N, A, LDA, X, SCALE,        SUBROUTINE ZLATRS( UPLO, TRANS, DIAG, NORMIN, N, A, LDA, X, SCALE,
      $                   CNORM, INFO )       $                   CNORM, INFO )
 *  *
 *  -- LAPACK auxiliary routine (version 3.4.0) --  *  -- LAPACK auxiliary routine --
 *  -- 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 2011  
 *  *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       CHARACTER          DIAG, NORMIN, TRANS, UPLO        CHARACTER          DIAG, NORMIN, TRANS, UPLO
Line 321 Line 318
 *  *
 *     Quick return if possible  *     Quick return if possible
 *  *
         SCALE = ONE
       IF( N.EQ.0 )        IF( N.EQ.0 )
      $   RETURN       $   RETURN
 *  *
 *     Determine machine dependent parameters to control overflow.  *     Determine machine dependent parameters to control overflow.
 *  *
       SMLNUM = DLAMCH( 'Safe minimum' )        SMLNUM = DLAMCH( 'Safe minimum' ) / DLAMCH( 'Precision' )
       BIGNUM = ONE / SMLNUM  
       CALL DLABAD( SMLNUM, BIGNUM )  
       SMLNUM = SMLNUM / DLAMCH( 'Precision' )  
       BIGNUM = ONE / SMLNUM        BIGNUM = ONE / SMLNUM
       SCALE = ONE  
 *  *
       IF( LSAME( NORMIN, 'N' ) ) THEN        IF( LSAME( NORMIN, 'N' ) ) THEN
 *  *
Line 363 Line 357
       IF( TMAX.LE.BIGNUM*HALF ) THEN        IF( TMAX.LE.BIGNUM*HALF ) THEN
          TSCAL = ONE           TSCAL = ONE
       ELSE        ELSE
          TSCAL = HALF / ( SMLNUM*TMAX )  *
          CALL DSCAL( N, TSCAL, CNORM, 1 )  *        Avoid NaN generation if entries in CNORM exceed the
   *        overflow threshold
   *
            IF ( TMAX.LE.DLAMCH('Overflow') ) THEN
   *           Case 1: All entries in CNORM are valid floating-point numbers
               TSCAL = HALF / ( SMLNUM*TMAX )
               CALL DSCAL( N, TSCAL, CNORM, 1 )
            ELSE
   *           Case 2: At least one column norm of A cannot be
   *           represented as a floating-point number. Find the
   *           maximum offdiagonal absolute value
   *           max( |Re(A(I,J))|, |Im(A(I,J)| ). If this entry is
   *           not +/- Infinity, use this value as TSCAL.
               TMAX = ZERO
               IF( UPPER ) THEN
   *
   *              A is upper triangular.
   *
                  DO J = 2, N
                     DO I = 1, J - 1
                        TMAX = MAX( TMAX, ABS( DBLE( A( I, J ) ) ),
        $                           ABS( DIMAG(A ( I, J ) ) ) )
                     END DO
                  END DO
               ELSE
   *
   *              A is lower triangular.
   *
                  DO J = 1, N - 1
                     DO I = J + 1, N
                        TMAX = MAX( TMAX, ABS( DBLE( A( I, J ) ) ),
        $                           ABS( DIMAG(A ( I, J ) ) ) )
                     END DO
                  END DO
               END IF
   *
               IF( TMAX.LE.DLAMCH('Overflow') ) THEN
                  TSCAL = ONE / ( SMLNUM*TMAX )
                  DO J = 1, N
                     IF( CNORM( J ).LE.DLAMCH('Overflow') ) THEN
                        CNORM( J ) = CNORM( J )*TSCAL
                     ELSE
   *                    Recompute the 1-norm of each column without
   *                    introducing Infinity in the summation.
                        TSCAL = TWO * TSCAL
                        CNORM( J ) = ZERO
                        IF( UPPER ) THEN
                           DO I = 1, J - 1
                              CNORM( J ) = CNORM( J ) +
        $                                  TSCAL * CABS2( A( I, J ) )
                           END DO
                        ELSE
                           DO I = J + 1, N
                              CNORM( J ) = CNORM( J ) +
        $                                  TSCAL * CABS2( A( I, J ) )
                           END DO
                        END IF
                        TSCAL = TSCAL * HALF
                     END IF
                  END DO
               ELSE
   *              At least one entry of A is not a valid floating-point
   *              entry. Rely on TRSV to propagate Inf and NaN.
                  CALL ZTRSV( UPLO, TRANS, DIAG, N, A, LDA, X, 1 )
                  RETURN
               END IF
            END IF
       END IF        END IF
 *  *
 *     Compute a bound on the computed solution vector to see if the  *     Compute a bound on the computed solution vector to see if the

Removed from v.1.8  
changed lines
  Added in v.1.20


CVSweb interface <joel.bertrand@systella.fr>