Diff for /rpl/lapack/lapack/zsyconv.f between versions 1.2 and 1.12

version 1.2, 2010/12/21 13:53:55 version 1.12, 2017/06/17 11:07:01
Line 1 Line 1
       SUBROUTINE ZSYCONV( UPLO, WAY, N, A, LDA, IPIV, WORK, INFO )  *> \brief \b ZSYCONV
 *  *
 *  -- LAPACK PROTOTYPE routine (version 3.2.2) --  *  =========== DOCUMENTATION ===========
 *  *
 *  -- Written by Julie Langou of the Univ. of TN    --  * Online html documentation available at
 *     May 2010  *            http://www.netlib.org/lapack/explore-html/
 *  *
   *> \htmlonly
   *> Download ZSYCONV + dependencies
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/zsyconv.f">
   *> [TGZ]</a>
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/zsyconv.f">
   *> [ZIP]</a>
   *> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/zsyconv.f">
   *> [TXT]</a>
   *> \endhtmlonly
   *
   *  Definition:
   *  ===========
   *
   *       SUBROUTINE ZSYCONV( UPLO, WAY, N, A, LDA, IPIV, E, INFO )
   *
   *       .. Scalar Arguments ..
   *       CHARACTER          UPLO, WAY
   *       INTEGER            INFO, LDA, N
   *       ..
   *       .. Array Arguments ..
   *       INTEGER            IPIV( * )
   *       COMPLEX*16         A( LDA, * ), E( * )
   *       ..
   *
   *
   *> \par Purpose:
   *  =============
   *>
   *> \verbatim
   *>
   *> ZSYCONV converts A given by ZHETRF into L and D or vice-versa.
   *> Get nondiagonal elements of D (returned in workspace) and
   *> apply or reverse permutation done in TRF.
   *> \endverbatim
   *
   *  Arguments:
   *  ==========
   *
   *> \param[in] UPLO
   *> \verbatim
   *>          UPLO is CHARACTER*1
   *>          Specifies whether the details of the factorization are stored
   *>          as an upper or lower triangular matrix.
   *>          = 'U':  Upper triangular, form is A = U*D*U**T;
   *>          = 'L':  Lower triangular, form is A = L*D*L**T.
   *> \endverbatim
   *>
   *> \param[in] WAY
   *> \verbatim
   *>          WAY is CHARACTER*1
   *>          = 'C': Convert
   *>          = 'R': Revert
   *> \endverbatim
   *>
   *> \param[in] N
   *> \verbatim
   *>          N is INTEGER
   *>          The order of the matrix A.  N >= 0.
   *> \endverbatim
   *>
   *> \param[in,out] A
   *> \verbatim
   *>          A is COMPLEX*16 array, dimension (LDA,N)
   *>          The block diagonal matrix D and the multipliers used to
   *>          obtain the factor U or L as computed by ZSYTRF.
   *> \endverbatim
   *>
   *> \param[in] LDA
   *> \verbatim
   *>          LDA is INTEGER
   *>          The leading dimension of the array A.  LDA >= max(1,N).
   *> \endverbatim
   *>
   *> \param[in] IPIV
   *> \verbatim
   *>          IPIV is INTEGER array, dimension (N)
   *>          Details of the interchanges and the block structure of D
   *>          as determined by ZSYTRF.
   *> \endverbatim
   *>
   *> \param[out] E
   *> \verbatim
   *>          E is COMPLEX*16 array, dimension (N)
   *>          E stores the supdiagonal/subdiagonal of the symmetric 1-by-1
   *>          or 2-by-2 block diagonal matrix D in LDLT.
   *> \endverbatim
   *>
   *> \param[out] INFO
   *> \verbatim
   *>          INFO is INTEGER
   *>          = 0:  successful exit
   *>          < 0:  if INFO = -i, the i-th argument had an illegal value
   *> \endverbatim
   *
   *  Authors:
   *  ========
   *
   *> \author Univ. of Tennessee
   *> \author Univ. of California Berkeley
   *> \author Univ. of Colorado Denver
   *> \author NAG Ltd.
   *
   *> \date December 2016
   *
   *> \ingroup complex16SYcomputational
   *
   *  =====================================================================
         SUBROUTINE ZSYCONV( UPLO, WAY, N, A, LDA, IPIV, E, INFO )
   *
   *  -- LAPACK computational 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..--
   *     December 2016
 *  *
 *     .. Scalar Arguments ..  *     .. Scalar Arguments ..
       CHARACTER          UPLO, WAY        CHARACTER          UPLO, WAY
Line 14 Line 125
 *     ..  *     ..
 *     .. Array Arguments ..  *     .. Array Arguments ..
       INTEGER            IPIV( * )        INTEGER            IPIV( * )
       DOUBLE COMPLEX     A( LDA, * ), WORK( * )        COMPLEX*16         A( LDA, * ), E( * )
 *     ..  *     ..
 *  *
 *  Purpose  
 *  =======  
 *  
 *  ZSYCONV converts A given by ZHETRF into L and D or vice-versa.  
 *  Get nondiagonal elements of D (returned in workspace) and   
 *  apply or reverse permutation done in TRF.  
 *  
 *  Arguments  
 *  =========  
 *  
 *  UPLO    (input) CHARACTER*1  
 *          Specifies whether the details of the factorization are stored  
 *          as an upper or lower triangular matrix.  
 *          = 'U':  Upper triangular, form is A = U*D*U**T;  
 *          = 'L':  Lower triangular, form is A = L*D*L**T.  
 *   
 *  WAY     (input) CHARACTER*1  
 *          = 'C': Convert   
 *          = 'R': Revert  
 *  
 *  N       (input) INTEGER  
 *          The order of the matrix A.  N >= 0.  
 *  
 *  A       (input) DOUBLE COMPLEX array, dimension (LDA,N)  
 *          The block diagonal matrix D and the multipliers used to  
 *          obtain the factor U or L as computed by ZSYTRF.  
 *  
 *  LDA     (input) INTEGER  
 *          The leading dimension of the array A.  LDA >= max(1,N).  
 *  
 *  IPIV    (input) INTEGER array, dimension (N)  
 *          Details of the interchanges and the block structure of D  
 *          as determined by ZSYTRF.  
 *  
 * WORK     (workspace) DOUBLE COMPLEX array, dimension (N)  
 *  
 * LWORK    (input) INTEGER  
 *          The length of WORK.  LWORK >=1.   
 *          LWORK = N  
 *  
 *          If LWORK = -1, then a workspace query is assumed; the routine  
 *          only calculates the optimal size of the WORK array, returns  
 *          this value as the first entry of the WORK array, and no error  
 *          message related to LWORK is issued by XERBLA.  
 *  
 *  INFO    (output) INTEGER  
 *          = 0:  successful exit  
 *          < 0:  if INFO = -i, the i-th argument had an illegal value  
 *  
 *  =====================================================================  *  =====================================================================
 *  *
 *     .. Parameters ..  *     .. Parameters ..
       DOUBLE COMPLEX     ZERO        COMPLEX*16         ZERO
       PARAMETER          ( ZERO = (0.0D+0,0.0D+0) )        PARAMETER          ( ZERO = (0.0D+0,0.0D+0) )
 *     ..  *     ..
 *     .. External Functions ..  *     .. External Functions ..
Line 81 Line 143
 *     .. Local Scalars ..  *     .. Local Scalars ..
       LOGICAL            UPPER, CONVERT        LOGICAL            UPPER, CONVERT
       INTEGER            I, IP, J        INTEGER            I, IP, J
       DOUBLE COMPLEX     TEMP        COMPLEX*16         TEMP
 *     ..  *     ..
 *     .. Executable Statements ..  *     .. Executable Statements ..
 *  *
Line 119 Line 181
 *           Convert VALUE  *           Convert VALUE
 *  *
             I=N              I=N
             WORK(1)=ZERO              E(1)=ZERO
             DO WHILE ( I .GT. 1 )              DO WHILE ( I .GT. 1 )
                IF( IPIV(I) .LT. 0 ) THEN                 IF( IPIV(I) .LT. 0 ) THEN
                   WORK(I)=A(I-1,I)                    E(I)=A(I-1,I)
                     E(I-1)=ZERO
                   A(I-1,I)=ZERO                    A(I-1,I)=ZERO
                   I=I-1                    I=I-1
                ELSE                 ELSE
                   WORK(I)=ZERO                    E(I)=ZERO
                ENDIF                 ENDIF
                I=I-1                 I=I-1
             END DO              END DO
 *  *
 *           Convert PERMUTATIONS  *           Convert PERMUTATIONS
 *    *
             I=N              I=N
             DO WHILE ( I .GE. 1 )              DO WHILE ( I .GE. 1 )
                IF( IPIV(I) .GT. 0) THEN                 IF( IPIV(I) .GT. 0) THEN
Line 163 Line 226
 *           Revert A (A is upper)  *           Revert A (A is upper)
 *  *
 *           Revert PERMUTATIONS  *           Revert PERMUTATIONS
 *    *
             I=1              I=1
             DO WHILE ( I .LE. N )              DO WHILE ( I .LE. N )
                IF( IPIV(I) .GT. 0 ) THEN                 IF( IPIV(I) .GT. 0 ) THEN
Line 194 Line 257
             I=N              I=N
             DO WHILE ( I .GT. 1 )              DO WHILE ( I .GT. 1 )
                IF( IPIV(I) .LT. 0 ) THEN                 IF( IPIV(I) .LT. 0 ) THEN
                   A(I-1,I)=WORK(I)                    A(I-1,I)=E(I)
                   I=I-1                    I=I-1
                ENDIF                 ENDIF
                I=I-1                 I=I-1
Line 212 Line 275
 *           Convert VALUE  *           Convert VALUE
 *  *
             I=1              I=1
             WORK(N)=ZERO              E(N)=ZERO
             DO WHILE ( I .LE. N )              DO WHILE ( I .LE. N )
                IF( I.LT.N .AND. IPIV(I) .LT. 0 ) THEN                 IF( I.LT.N .AND. IPIV(I) .LT. 0 ) THEN
                   WORK(I)=A(I+1,I)                    E(I)=A(I+1,I)
                     E(I+1)=ZERO
                   A(I+1,I)=ZERO                    A(I+1,I)=ZERO
                   I=I+1                    I=I+1
                ELSE                 ELSE
                   WORK(I)=ZERO                    E(I)=ZERO
                ENDIF                 ENDIF
                I=I+1                 I=I+1
             END DO              END DO
Line 287 Line 351
             I=1              I=1
             DO WHILE ( I .LE. N-1 )              DO WHILE ( I .LE. N-1 )
                IF( IPIV(I) .LT. 0 ) THEN                 IF( IPIV(I) .LT. 0 ) THEN
                   A(I+1,I)=WORK(I)                    A(I+1,I)=E(I)
                   I=I+1                    I=I+1
                ENDIF                 ENDIF
                I=I+1                 I=I+1

Removed from v.1.2  
changed lines
  Added in v.1.12


CVSweb interface <joel.bertrand@systella.fr>