File indexing completed on 2025-08-05 08:21:09
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063 SUBROUTINE PYCBAL(NM,N,AR,AI,LOW,IGH,SCALE)
0064
0065 INTEGER I,J,K,L,M,N,JJ,NM,IGH,LOW,IEXC
0066 DOUBLE PRECISION AR(4,4),AI(4,4),SCALE(4)
0067 DOUBLE PRECISION C,F,G,R,S,B2,RADIX
0068 LOGICAL NOCONV
0069
0070 RADIX = 16.0D0
0071
0072 B2 = RADIX * RADIX
0073 K = 1
0074 L = N
0075 GOTO 150
0076
0077
0078 100 SCALE(M) = J
0079 IF (J .EQ. M) GOTO 130
0080
0081 DO 110 I = 1, L
0082 F = AR(I,J)
0083 AR(I,J) = AR(I,M)
0084 AR(I,M) = F
0085 F = AI(I,J)
0086 AI(I,J) = AI(I,M)
0087 AI(I,M) = F
0088 110 CONTINUE
0089
0090 DO 120 I = K, N
0091 F = AR(J,I)
0092 AR(J,I) = AR(M,I)
0093 AR(M,I) = F
0094 F = AI(J,I)
0095 AI(J,I) = AI(M,I)
0096 AI(M,I) = F
0097 120 CONTINUE
0098
0099 130 IF(IEXC.EQ.1) GOTO 140
0100 IF(IEXC.EQ.2) GOTO 180
0101
0102
0103 140 IF (L .EQ. 1) GOTO 320
0104 L = L - 1
0105
0106 150 DO 170 JJ = 1, L
0107 J = L + 1 - JJ
0108
0109 DO 160 I = 1, L
0110 IF (I .EQ. J) GOTO 160
0111 IF (AR(J,I) .NE. 0.0D0 .OR. AI(J,I) .NE. 0.0D0) GOTO 170
0112 160 CONTINUE
0113
0114 M = L
0115 IEXC = 1
0116 GOTO 100
0117 170 CONTINUE
0118
0119 GOTO 190
0120
0121
0122 180 K = K + 1
0123
0124 190 DO 210 J = K, L
0125
0126 DO 200 I = K, L
0127 IF (I .EQ. J) GOTO 200
0128 IF (AR(I,J) .NE. 0.0D0 .OR. AI(I,J) .NE. 0.0D0) GOTO 210
0129 200 CONTINUE
0130
0131 M = K
0132 IEXC = 2
0133 GOTO 100
0134 210 CONTINUE
0135
0136 DO 220 I = K, L
0137 220 SCALE(I) = 1.0D0
0138
0139 230 NOCONV = .FALSE.
0140
0141 DO 310 I = K, L
0142 C = 0.0D0
0143 R = 0.0D0
0144
0145 DO 240 J = K, L
0146 IF (J .EQ. I) GOTO 240
0147 C = C + DABS(AR(J,I)) + DABS(AI(J,I))
0148 R = R + DABS(AR(I,J)) + DABS(AI(I,J))
0149 240 CONTINUE
0150
0151 IF (C .EQ. 0.0D0 .OR. R .EQ. 0.0D0) GOTO 310
0152 G = R / RADIX
0153 F = 1.0D0
0154 S = C + R
0155 250 IF (C .GE. G) GOTO 260
0156 F = F * RADIX
0157 C = C * B2
0158 GOTO 250
0159 260 G = R * RADIX
0160 270 IF (C .LT. G) GOTO 280
0161 F = F / RADIX
0162 C = C / B2
0163 GOTO 270
0164
0165 280 IF ((C + R) / F .GE. 0.95D0 * S) GOTO 310
0166 G = 1.0D0 / F
0167 SCALE(I) = SCALE(I) * F
0168 NOCONV = .TRUE.
0169
0170 DO 290 J = K, N
0171 AR(I,J) = AR(I,J) * G
0172 AI(I,J) = AI(I,J) * G
0173 290 CONTINUE
0174
0175 DO 300 J = 1, L
0176 AR(J,I) = AR(J,I) * F
0177 AI(J,I) = AI(J,I) * F
0178 300 CONTINUE
0179
0180 310 CONTINUE
0181
0182 IF (NOCONV) GOTO 230
0183
0184 320 LOW = K
0185 IGH = L
0186 RETURN
0187 END