|
|
| |
| # lines: |
145 | | # code: |
145 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 23 |
| # Callers: | 2 |
| # Callings: | 0 |
| # Words: | 66 |
| # Keywords: | 37 |
|
|
|
|
|
..
Purpose
=======
CLANV2 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
B (input/output) COMPLEX
C (input/output) COMPLEX
D (input/output) COMPLEX
On entry, the elements of the input matrix.
On exit, they are overwritten by the elements of the
standardised Schur form.
RT1 (output) COMPLEX
RT2 (output) COMPLEX
The two eigenvalues.
CS (output) REAL
SN (output) COMPLEX
Parameters of the rotation matrix.
Further Details
===============
Implemented by Mark R. Fahey, May 28, 1999
=====================================================================
.. Parameters ..
|
|
|
|
001 SUBROUTINE CLANV2( 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 REAL CS
010 COMPLEX A , B , C , D , RT1 , RT2 , SN
011 REAL RZERO , HALF , RONE
012 PARAMETER( RZERO = 0.0E + 0 , HALF = 0.5E + 0 ,
013 $RONE = 1.0E + 0 )
014 COMPLEX ZERO , ONE
015 PARAMETER( ZERO =( 0.0E + 0 , 0.0E + 0 ) ,
016 $ONE =( 1.0E + 0 , 0.0E + 0 ) )
017 * ..
018 * .. Local Scalars ..
019 COMPLEX AA , BB , DD , T , TEMP , TEMP2 , U , X , Y
020 * ..
021 * .. External Functions ..
022 COMPLEX CLADIV
023 EXTERNAL CLADIV
024 * ..
025 * .. External Subroutines ..
026 EXTERNAL CLARTG
027 * ..
028 * .. Intrinsic Functions ..
029 INTRINSIC REAL , CMPLX , CONJG , AIMAG , 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 = CMPLX( RZERO , RONE )*CS
060 ELSE
060
061 TEMP = SQRT( B + C )
062 TEMP2 = CLADIV( SQRT( B ) , TEMP )
063 CS = REAL( TEMP2 )
064 SN = CLADIV( 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( REAL( X )*REAL( Y ) + AIMAG( X )*AIMAG( Y ).LT.RZERO )
077
078 $ Y = - Y
079 T = T - CLADIV( U ,( X + Y ) )
080
081 * Do one QR step with exact shift T - resulting 2 x 2 in
082 * triangular form.
083
084 CALL CLARTG( A - T , C , CS , SN , AA )
085
086 D = D - T
087 BB = CS*B + SN*D
088 DD = - CONJG( SN )*B + CS*D
089
090 A = AA*CS + BB*CONJG( 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 CLANV2
106
107 END20
7
|
|
Variables in Routine CLANV2()
| Summary Report |
| Data Type | Quantity | Size(byte) |
| COMPLEX | 19 | 76 |
| REAL | 4 | 16 |
| TOTAL | 23 | 92 |
List of Variables
COMPLEX
| A | AA | B | BB | C |
| CLADIV | D | DD | ONE | RT1 |
| RT2 | SN | T | TEMP | TEMP2 |
| U | X | Y | ZERO | |
REAL
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*CONJG( SN ) + T, TA = AA*CS + BB*CONJG( SN ) + T, TEMPA = TEMP{2A = A + TEMP}, AAA = AA*CS + BB*CONJG( SN ) + T, BBA = AA*CS + BB*CONJG( SN ) + T, CSA = AA*CS + BB*CONJG( 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 | <--- | HALFCS = SQRT( HALF ), RONECS = RONE, RZEROCS = RZERO, TEMP2CS = REAL( TEMP2 ) |
| D | <--- | AD = A, TD = D - T{2D = T}, TEMPD = D - TEMP, DD = D - TEMP{2D = D - T} |
| DD | <--- | SNDD = -CONJG( SN )*B + CS*D, BDD = -CONJG( SN )*B + CS*D, CSDD = -CONJG( SN )*B + CS*D, DDD = -CONJG( SN )*B + CS*D |
| RT1 | <--- | ART1 = A |
| RT2 | <--- | DRT2 = D |
| SN | <--- | ONESN = ONE, RONESN = CMPLX( RZERO, RONE )*CS, RZEROSN = CMPLX( RZERO, RONE )*CS, TEMPSN = CLADIV( SQRT( C ), TEMP ), ZEROSN = ZERO, CSN = CLADIV( SQRT( C ), TEMP ), CLADIVSN = CLADIV( SQRT( C ), TEMP ), CSSN = CMPLX( RZERO, RONE )*CS |
| T | <--- | TT = T - CLADIV( U, ( X+Y ) ), UT = T - CLADIV( U, ( X+Y ) ), XT = T - CLADIV( U, ( X+Y ) ), YT = T - CLADIV( U, ( X+Y ) ), CLADIVT = T - CLADIV( 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 = CLADIV( SQRT( B ), TEMP ), BTEMP2 = CLADIV( SQRT( B ), TEMP ), CLADIVTEMP2 = CLADIV( SQRT( B ), TEMP ) |
| U | <--- | BU = B*C, CU = B*C |
| X | <--- | AX = HALF*( A-T ), HALFX = HALF*( A-T ), TX = HALF*( A-T ) |
| Y | <--- | UY = SQRT( X*X+U ), XY = SQRT( X*X+U ) |
|
|
Analysis elements of the routine CLANV2() 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 , CLADIV , CS , D , DD , HALF , ONE , RONE , RT1 , RT2 , RZERO , SN , T , TEMP , TEMP2 , U , X , Y , ZERO |
|
Accessed arrays [ array name : associated index ] |
| | CLADIV | : 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 ) ) , ( (REAL( X )*REAL( Y ) + AIMAG( X )*AIMAG( Y ).LT.RZERO ) ) |
|
| List of variables | A AA B BB C CLADIV CS
| D DD HALF ONE RONE RT1 RT2 RZERO
| SN T TEMP TEMP2 U X Y ZERO | | close
| |
A
AA
B
BB
C
CLADIV
CS
D
DD
HALF
ONE
RONE
RT1
RT2
RZERO
SN
T
TEMP
TEMP2
U
X
Y
ZERO
| |