|
|
| |
| # lines: |
145 | | # code: |
145 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 23 |
| # Callers: | 2 |
| # Callings: | 0 |
| # Words: | 68 |
| # Keywords: | 36 |
|
|
|
|
|
..
Purpose
=======
ZLANV2 computes the Schur factorization of a complex 2-by-2
nonhermitian matrix in standard form:
[ A B ] = [ CS -SN ] [ AA BB ] [ CS SN ]
[ C D ] [ SN CS ] [ 0 DD ] [-SN CS ]
Arguments
=========
A (input/output) COMPLEX*16
B (input/output) COMPLEX*16
C (input/output) COMPLEX*16
D (input/output) COMPLEX*16
On entry, the elements of the input matrix.
On exit, they are overwritten by the elements of the
standardised Schur form.
RT1 (output) COMPLEX*16
RT2 (output) COMPLEX*16
The two eigenvalues.
CS (output) DOUBLE PRECISION
SN (output) COMPLEX*16
Parameters of the rotation matrix.
Further Details
===============
Implemented by Mark R. Fahey, May 28, 1999
=====================================================================
.. Parameters ..
|
|
|
|
001 SUBROUTINE ZLANV2( A , B , C , D , RT1 , RT2 , CS , SN )
002
003 * -- ScaLAPACK routine(version 1.7) --
004 * Univ. of Tennessee , Univ. of California Berkeley , NAG Ltd. ,
005 * Courant Institute , Argonne National Lab , and Rice University
006 * May 28 , 1999
007
008 * .. Scalar Arguments ..
009 DOUBLE PRECISION CS
010 COMPLEX*16 A , B , C , D , RT1 , RT2 , SN
011 DOUBLE PRECISION RZERO , HALF , RONE
012 PARAMETER( RZERO = 0.0D + 0 , HALF = 0.5D + 0 ,
013 $RONE = 1.0D + 0 )
014 COMPLEX*16 ZERO , ONE
015 PARAMETER( ZERO =( 0.0D + 0 , 0.0D + 0 ) ,
016 $ONE =( 1.0D + 0 , 0.0D + 0 ) )
017 * ..
018 * .. Local Scalars ..
019 COMPLEX*16 AA , BB , DD , T , TEMP , TEMP2 , U , X , Y
020 * ..
021 * .. External Functions ..
022 COMPLEX*16 ZLADIV
023 EXTERNAL ZLADIV
024 * ..
025 * .. External Subroutines ..
026 EXTERNAL ZLARTG
027 * ..
028 * .. Intrinsic Functions ..
029 INTRINSIC DBLE , DCMPLX , DCONJG , DIMAG , SQRT
030 * ..
031 * .. Executable Statements ..
032
033 * Initialize CS and SN
034
035 CS = RONE
036 SN = ZERO
037
038 IF( C.EQ.ZERO ) THEN
038
039 GO TO 10
040
041 ELSE IF( B.EQ.ZERO ) THEN
042
043 * Swap rows and columns
044
044
045 CS = RZERO
046 SN = ONE
047 TEMP = D
048 D = A
049 A = TEMP
050 B = - C
051 C = ZERO
052 GO TO 10
053 ELSE IF(( A - D ).EQ.ZERO ) THEN
053
054 TEMP = SQRT( B*C )
055 A = A + TEMP
056 D = D - TEMP
057 IF(( B + C ).EQ.ZERO ) THEN
057
058 CS = SQRT( HALF )
059 SN = DCMPLX( RZERO , RONE )*CS
060 ELSE
060
061 TEMP = SQRT( B + C )
062 TEMP2 = ZLADIV( SQRT( B ) , TEMP )
063 CS = DBLE( TEMP2 )
064 SN = ZLADIV( SQRT( C ) , TEMP )
065 END IF
066 B = B - C
067 C = ZERO
068 GO TO 10
069 ELSE
070
071 * Compute eigenvalue closest to D
072
072
073 T = D
074 U = B*C
075 X = HALF*( A - T )
076 Y = SQRT( X*X + U )
077 IF( DBLE( X )*DBLE( Y ) + DIMAG( X )*DIMAG( Y ).LT.RZERO )
077
078 $ Y = - Y
079 T = T - ZLADIV( U ,( X + Y ) )
080
081 * Do one QR step with exact shift T - resulting 2 x 2 in
082 * triangular form.
083
084 CALL ZLARTG( A - T , C , CS , SN , AA )
085
086 D = D - T
087 BB = CS*B + SN*D
088 DD = - DCONJG( SN )*B + CS*D
089
090 A = AA*CS + BB*DCONJG( SN ) + T
091 B = - AA*SN + BB*CS
092 C = ZERO
093 D = T
094
095 END IF
096
097 10 CONTINUE
098
099 * Store eigenvalues in RT1 and RT2.
100
101 RT1 = A
102 RT2 = D
103 RETURN
104
105 * End of ZLANV2
106
107 END20
7
|
|
Variables in Routine ZLANV2()
| Summary Report |
| Data Type | Quantity | Size(byte) |
| COMPLEX*16 | 19 | ? |
| DOUBLE PRECISION | 4 | 16 |
| TOTAL | 23 | 16 |
List of Variables
COMPLEX*16
| A | AA | B | BB | C |
| D | DD | ONE | RT1 | RT2 |
| SN | T | TEMP | TEMP2 | U |
| X | Y | ZERO | ZLADIV | |
DOUBLE PRECISION
Variables Dependence Graph Put the mouse over a right hand side variable to display the corresponding line of the dependence | | - | | - | - | | A | <--- | AA = A + TEMP, SNA = AA*CS + BB*DCONJG( SN ) + T, TA = AA*CS + BB*DCONJG( SN ) + T, TEMPA = TEMP{2A = A + TEMP}, AAA = AA*CS + BB*DCONJG( SN ) + T, BBA = AA*CS + BB*DCONJG( SN ) + T, CSA = AA*CS + BB*DCONJG( SN ) + T |
| B | <--- | SNB = -AA*SN + BB*CS, AAB = -AA*SN + BB*CS, BB = B - C, BBB = -AA*SN + BB*CS, CB = -C{2B = B - C}, CSB = -AA*SN + BB*CS |
| BB | <--- | SNBB = CS*B + SN*D, BBB = CS*B + SN*D, CSBB = CS*B + SN*D, DBB = CS*B + SN*D |
| C | <--- | ZEROC = ZERO{2C = ZERO, 3C = ZERO} |
| CS | <--- | RONECS = RONE, RZEROCS = RZERO, TEMP2CS = DBLE( TEMP2 ), HALFCS = SQRT( HALF ) |
| D | <--- | AD = A, TD = D - T{2D = T}, TEMPD = D - TEMP, DD = D - TEMP{2D = D - T} |
| DD | <--- | SNDD = -DCONJG( SN )*B + CS*D, BDD = -DCONJG( SN )*B + CS*D, CSDD = -DCONJG( SN )*B + CS*D, DDD = -DCONJG( SN )*B + CS*D |
| RT1 | <--- | ART1 = A |
| RT2 | <--- | DRT2 = D |
| SN | <--- | ONESN = ONE, RONESN = DCMPLX( RZERO, RONE )*CS, RZEROSN = DCMPLX( RZERO, RONE )*CS, TEMPSN = ZLADIV( SQRT( C ), TEMP ), ZEROSN = ZERO, ZLADIVSN = ZLADIV( SQRT( C ), TEMP ), CSN = ZLADIV( SQRT( C ), TEMP ), CSSN = DCMPLX( RZERO, RONE )*CS |
| T | <--- | TT = T - ZLADIV( U, ( X+Y ) ), UT = T - ZLADIV( U, ( X+Y ) ), XT = T - ZLADIV( U, ( X+Y ) ), YT = T - ZLADIV( U, ( X+Y ) ), ZLADIVT = T - ZLADIV( U, ( X+Y ) ), DT = D |
| TEMP | <--- | BTEMP = SQRT( B*C ){2TEMP = SQRT( B+C )}, CTEMP = SQRT( B*C ){2TEMP = SQRT( B+C )}, DTEMP = D |
| TEMP2 | <--- | TEMPTEMP2 = ZLADIV( SQRT( B ), TEMP ), ZLADIVTEMP2 = ZLADIV( SQRT( B ), TEMP ), BTEMP2 = ZLADIV( SQRT( B ), TEMP ) |
| U | <--- | BU = B*C, CU = B*C |
| X | <--- | AX = HALF*( A-T ), TX = HALF*( A-T ), HALFX = HALF*( A-T ) |
| Y | <--- | UY = SQRT( X*X+U ), XY = SQRT( X*X+U ) |
|
|
Analysis elements of the routine ZLANV2() Put the mouse over each element to display detailed matching information
Assigned variables |
| | | A , B , BB , C , CS , D , DD , HALF , ONE , RONE , RT1 , RT2 , RZERO , SN , T , TEMP , TEMP2 , U , X , Y , ZERO |
|
Active variables |
| | | A , AA , B , BB , C , CS , D , DD , HALF , ONE , RONE , RT1 , RT2 , RZERO , SN , T , TEMP , TEMP2 , U , X , Y , ZERO , ZLADIV |
|
Accessed arrays [ array name : associated index ] |
| | ZLADIV | : SQRT( B ), TEMP , SQRT( C ), TEMP , U, ( X+Y ) |
|
Conditional statements [ statement : associated predicate ] |
| | do | : ( one QR step with exact shift T - resulting 2 x 2 in ) |
| | if | : ( C.EQ.ZERO ) , ( B.EQ.ZERO ) , ( (( A-D ).EQ.ZERO ) ) , ( (( B+C ).EQ.ZERO ) ) , ( (DBLE( X )*DBLE( Y ) + DIMAG( X )*DIMAG( Y ).LT.RZERO ) ) |
|
| List of variables | A AA B BB C CS D
| DD HALF ONE RONE RT1 RT2 RZERO SN
| T TEMP TEMP2 U X Y ZERO ZLADIV | | close
| |
A
AA
B
BB
C
CS
D
DD
HALF
ONE
RONE
RT1
RT2
RZERO
SN
T
TEMP
TEMP2
U
X
Y
ZERO
ZLADIV
| |