Diff for /rpl/lapack/lapack/dlacn2.f between versions 1.1 and 1.19

version 1.1, 2010/01/26 15:22:46 version 1.19, 2023/08/07 08:38:53
Line 1 Line 1
   *> \brief \b DLACN2 estimates the 1-norm of a square matrix, using reverse communication for evaluating matrix-vector products.
   *
   *  =========== DOCUMENTATION ===========
   *
   * Online html documentation available at
   *            http://www.netlib.org/lapack/explore-html/
   *
   *> \htmlonly
   *> Download DLACN2 + dependencies
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dlacn2.f">
   *> [TGZ]</a>
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dlacn2.f">
   *> [ZIP]</a>
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dlacn2.f">
   *> [TXT]</a>
   *> \endhtmlonly
   *
   *  Definition:
   *  ===========
   *
   *       SUBROUTINE DLACN2( N, V, X, ISGN, EST, KASE, ISAVE )
   *
   *       .. Scalar Arguments ..
   *       INTEGER            KASE, N
   *       DOUBLE PRECISION   EST
   *       ..
   *       .. Array Arguments ..
   *       INTEGER            ISGN( * ), ISAVE( 3 )
   *       DOUBLE PRECISION   V( * ), X( * )
   *       ..
   *
   *
   *> \par Purpose:
   *  =============
   *>
   *> \verbatim
   *>
   *> DLACN2 estimates the 1-norm of a square, real matrix A.
   *> Reverse communication is used for evaluating matrix-vector products.
   *> \endverbatim
   *
   *  Arguments:
   *  ==========
   *
   *> \param[in] N
   *> \verbatim
   *>          N is INTEGER
   *>         The order of the matrix.  N >= 1.
   *> \endverbatim
   *>
   *> \param[out] V
   *> \verbatim
   *>          V is DOUBLE PRECISION array, dimension (N)
   *>         On the final return, V = A*W,  where  EST = norm(V)/norm(W)
   *>         (W is not returned).
   *> \endverbatim
   *>
   *> \param[in,out] X
   *> \verbatim
   *>          X is DOUBLE PRECISION array, dimension (N)
   *>         On an intermediate return, X should be overwritten by
   *>               A * X,   if KASE=1,
   *>               A**T * X,  if KASE=2,
   *>         and DLACN2 must be re-called with all the other parameters
   *>         unchanged.
   *> \endverbatim
   *>
   *> \param[out] ISGN
   *> \verbatim
   *>          ISGN is INTEGER array, dimension (N)
   *> \endverbatim
   *>
   *> \param[in,out] EST
   *> \verbatim
   *>          EST is DOUBLE PRECISION
   *>         On entry with KASE = 1 or 2 and ISAVE(1) = 3, EST should be
   *>         unchanged from the previous call to DLACN2.
   *>         On exit, EST is an estimate (a lower bound) for norm(A).
   *> \endverbatim
   *>
   *> \param[in,out] KASE
   *> \verbatim
   *>          KASE is INTEGER
   *>         On the initial call to DLACN2, KASE should be 0.
   *>         On an intermediate return, KASE will be 1 or 2, indicating
   *>         whether X should be overwritten by A * X  or A**T * X.
   *>         On the final return from DLACN2, KASE will again be 0.
   *> \endverbatim
   *>
   *> \param[in,out] ISAVE
   *> \verbatim
   *>          ISAVE is INTEGER array, dimension (3)
   *>         ISAVE is used to save variables between calls to DLACN2
   *> \endverbatim
   *
   *  Authors:
   *  ========
   *
   *> \author Univ. of Tennessee
   *> \author Univ. of California Berkeley
   *> \author Univ. of Colorado Denver
   *> \author NAG Ltd.
   *
   *> \ingroup doubleOTHERauxiliary
   *
   *> \par Further Details:
   *  =====================
   *>
   *> \verbatim
   *>
   *>  Originally named SONEST, dated March 16, 1988.
   *>
   *>  This is a thread safe version of DLACON, which uses the array ISAVE
   *>  in place of a SAVE statement, as follows:
   *>
   *>     DLACON     DLACN2
   *>      JUMP     ISAVE(1)
   *>      J        ISAVE(2)
   *>      ITER     ISAVE(3)
   *> \endverbatim
   *
   *> \par Contributors:
   *  ==================
   *>
   *>     Nick Higham, University of Manchester
   *
   *> \par References:
   *  ================
   *>
   *>  N.J. Higham, "FORTRAN codes for estimating the one-norm of
   *>  a real or complex matrix, with applications to condition estimation",
   *>  ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.
   *>
   *  =====================================================================
       SUBROUTINE DLACN2( N, V, X, ISGN, EST, KASE, ISAVE )        SUBROUTINE DLACN2( N, V, X, ISGN, EST, KASE, ISAVE )
 *  *
 *  -- LAPACK auxiliary routine (version 3.2) --  *  -- 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 2006  
 *  *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       INTEGER            KASE, N        INTEGER            KASE, N
Line 14 Line 147
       DOUBLE PRECISION   V( * ), X( * )        DOUBLE PRECISION   V( * ), X( * )
 *     ..  *     ..
 *  *
 *  Purpose  
 *  =======  
 *  
 *  DLACN2 estimates the 1-norm of a square, real matrix A.  
 *  Reverse communication is used for evaluating matrix-vector products.  
 *  
 *  Arguments  
 *  =========  
 *  
 *  N      (input) INTEGER  
 *         The order of the matrix.  N >= 1.  
 *  
 *  V      (workspace) DOUBLE PRECISION array, dimension (N)  
 *         On the final return, V = A*W,  where  EST = norm(V)/norm(W)  
 *         (W is not returned).  
 *  
 *  X      (input/output) DOUBLE PRECISION array, dimension (N)  
 *         On an intermediate return, X should be overwritten by  
 *               A * X,   if KASE=1,  
 *               A' * X,  if KASE=2,  
 *         and DLACN2 must be re-called with all the other parameters  
 *         unchanged.  
 *  
 *  ISGN   (workspace) INTEGER array, dimension (N)  
 *  
 *  EST    (input/output) DOUBLE PRECISION  
 *         On entry with KASE = 1 or 2 and ISAVE(1) = 3, EST should be  
 *         unchanged from the previous call to DLACN2.  
 *         On exit, EST is an estimate (a lower bound) for norm(A).   
 *  
 *  KASE   (input/output) INTEGER  
 *         On the initial call to DLACN2, KASE should be 0.  
 *         On an intermediate return, KASE will be 1 or 2, indicating  
 *         whether X should be overwritten by A * X  or A' * X.  
 *         On the final return from DLACN2, KASE will again be 0.  
 *  
 *  ISAVE  (input/output) INTEGER array, dimension (3)  
 *         ISAVE is used to save variables between calls to DLACN2  
 *  
 *  Further Details  
 *  ======= =======  
 *  
 *  Contributed by Nick Higham, University of Manchester.  
 *  Originally named SONEST, dated March 16, 1988.  
 *  
 *  Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of  
 *  a real or complex matrix, with applications to condition estimation",  
 *  ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988.  
 *  
 *  This is a thread safe version of DLACON, which uses the array ISAVE  
 *  in place of a SAVE statement, as follows:  
 *  
 *     DLACON     DLACN2  
 *      JUMP     ISAVE(1)  
 *      J        ISAVE(2)  
 *      ITER     ISAVE(3)  
 *  
 *  =====================================================================  *  =====================================================================
 *  *
 *     .. Parameters ..  *     .. Parameters ..
Line 81 Line 157
 *     ..  *     ..
 *     .. Local Scalars ..  *     .. Local Scalars ..
       INTEGER            I, JLAST        INTEGER            I, JLAST
       DOUBLE PRECISION   ALTSGN, ESTOLD, TEMP        DOUBLE PRECISION   ALTSGN, ESTOLD, TEMP, XS
 *     ..  *     ..
 *     .. External Functions ..  *     .. External Functions ..
       INTEGER            IDAMAX        INTEGER            IDAMAX
Line 92 Line 168
       EXTERNAL           DCOPY        EXTERNAL           DCOPY
 *     ..  *     ..
 *     .. Intrinsic Functions ..  *     .. Intrinsic Functions ..
       INTRINSIC          ABS, DBLE, NINT, SIGN        INTRINSIC          ABS, DBLE, NINT
 *     ..  *     ..
 *     .. Executable Statements ..  *     .. Executable Statements ..
 *  *
Line 120 Line 196
       EST = DASUM( N, X, 1 )        EST = DASUM( N, X, 1 )
 *  *
       DO 30 I = 1, N        DO 30 I = 1, N
          X( I ) = SIGN( ONE, X( I ) )           IF( X(I).GE.ZERO ) THEN
               X(I) = ONE
            ELSE
               X(I) = -ONE
            END IF
          ISGN( I ) = NINT( X( I ) )           ISGN( I ) = NINT( X( I ) )
    30 CONTINUE     30 CONTINUE
       KASE = 2        KASE = 2
Line 153 Line 233
       ESTOLD = EST        ESTOLD = EST
       EST = DASUM( N, V, 1 )        EST = DASUM( N, V, 1 )
       DO 80 I = 1, N        DO 80 I = 1, N
          IF( NINT( SIGN( ONE, X( I ) ) ).NE.ISGN( I ) )           IF( X(I).GE.ZERO ) THEN
               XS = ONE
            ELSE
               XS = -ONE
            END IF
            IF( NINT( XS ).NE.ISGN( I ) )
      $      GO TO 90       $      GO TO 90
    80 CONTINUE     80 CONTINUE
 *     REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED.  *     REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED.
Line 165 Line 250
      $   GO TO 120       $   GO TO 120
 *  *
       DO 100 I = 1, N        DO 100 I = 1, N
          X( I ) = SIGN( ONE, X( I ) )           IF( X(I).GE.ZERO ) THEN
               X(I) = ONE
            ELSE
               X(I) = -ONE
            END IF
          ISGN( I ) = NINT( X( I ) )           ISGN( I ) = NINT( X( I ) )
   100 CONTINUE    100 CONTINUE
       KASE = 2        KASE = 2

Removed from v.1.1  
changed lines
  Added in v.1.19


CVSweb interface <joel.bertrand@systella.fr>