PyFishPack 0.1.0__cp313-cp313-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. PyFishPack/__init__.py +86 -0
  2. PyFishPack/__pycache__/__init__.cpython-313.pyc +0 -0
  3. PyFishPack/__pycache__/apps.cpython-313.pyc +0 -0
  4. PyFishPack/_dummy.c +23 -0
  5. PyFishPack/_dummy.cp313-win_amd64.pyd +0 -0
  6. PyFishPack/apps.py +3640 -0
  7. PyFishPack/fishpack.cp313-win_amd64.dll.a +0 -0
  8. PyFishPack/fishpack.cp313-win_amd64.pyd +0 -0
  9. PyFishPack/meson.build +213 -0
  10. PyFishPack/src/archive/f77/Makefile +19 -0
  11. PyFishPack/src/archive/f77/blktri.f +1404 -0
  12. PyFishPack/src/archive/f77/cblktri.f +1414 -0
  13. PyFishPack/src/archive/f77/cmgnbn.f +1592 -0
  14. PyFishPack/src/archive/f77/comf.f +186 -0
  15. PyFishPack/src/archive/f77/fftpack.f +2968 -0
  16. PyFishPack/src/archive/f77/genbun.f +1335 -0
  17. PyFishPack/src/archive/f77/gnbnaux.f +314 -0
  18. PyFishPack/src/archive/f77/hstcrt.f +443 -0
  19. PyFishPack/src/archive/f77/hstcsp.f +683 -0
  20. PyFishPack/src/archive/f77/hstcyl.f +485 -0
  21. PyFishPack/src/archive/f77/hstplr.f +538 -0
  22. PyFishPack/src/archive/f77/hstssp.f +634 -0
  23. PyFishPack/src/archive/f77/hw3crt.f +687 -0
  24. PyFishPack/src/archive/f77/hwscrt.f +512 -0
  25. PyFishPack/src/archive/f77/hwscsp.f +728 -0
  26. PyFishPack/src/archive/f77/hwscyl.f +538 -0
  27. PyFishPack/src/archive/f77/hwsplr.f +602 -0
  28. PyFishPack/src/archive/f77/hwsssp.f +780 -0
  29. PyFishPack/src/archive/f77/pois3d.f +550 -0
  30. PyFishPack/src/archive/f77/poistg.f +875 -0
  31. PyFishPack/src/archive/f77/sepaux.f +361 -0
  32. PyFishPack/src/archive/f77/sepeli.f +1029 -0
  33. PyFishPack/src/archive/f77/sepx4.f +958 -0
  34. PyFishPack/src/centered_axisymmetric_spherical_solver.f90 +1002 -0
  35. PyFishPack/src/centered_cartesian_helmholtz_solver_3d.f90 +819 -0
  36. PyFishPack/src/centered_cartesian_solver.f90 +583 -0
  37. PyFishPack/src/centered_cylindrical_solver.f90 +634 -0
  38. PyFishPack/src/centered_helmholtz_solvers.f90 +156 -0
  39. PyFishPack/src/centered_polar_solver.f90 +746 -0
  40. PyFishPack/src/centered_real_linear_systems_solver.f90 +280 -0
  41. PyFishPack/src/centered_spherical_solver.f90 +928 -0
  42. PyFishPack/src/complex_block_tridiagonal_linear_systems_solver.f90 +1947 -0
  43. PyFishPack/src/complex_linear_systems_solver.f90 +1787 -0
  44. PyFishPack/src/fftpack_c_api.f90 +86 -0
  45. PyFishPack/src/fishpack.f90 +191 -0
  46. PyFishPack/src/fishpack.pyf +504 -0
  47. PyFishPack/src/fishpack_c_api.f90 +365 -0
  48. PyFishPack/src/fishpack_original.pyf +2119 -0
  49. PyFishPack/src/fishpack_precision.f90 +53 -0
  50. PyFishPack/src/general_linear_systems_solver_3d.f90 +296 -0
  51. PyFishPack/src/iterative_solvers.f90 +969 -0
  52. PyFishPack/src/main.f90 +10 -0
  53. PyFishPack/src/pyfishpack_module.c +1302 -0
  54. PyFishPack/src/real_block_tridiagonal_linear_systems_solver.f90 +319 -0
  55. PyFishPack/src/sepeli.f90 +1454 -0
  56. PyFishPack/src/sepx4.f90 +1338 -0
  57. PyFishPack/src/staggered_axisymmetric_spherical_solver.f90 +908 -0
  58. PyFishPack/src/staggered_cartesian_solver.f90 +553 -0
  59. PyFishPack/src/staggered_cylindrical_solver.f90 +630 -0
  60. PyFishPack/src/staggered_helmholtz_solvers.f90 +172 -0
  61. PyFishPack/src/staggered_polar_solver.f90 +651 -0
  62. PyFishPack/src/staggered_real_linear_systems_solver.f90 +258 -0
  63. PyFishPack/src/staggered_spherical_solver.f90 +758 -0
  64. PyFishPack/src/three_dimensional_solvers.f90 +602 -0
  65. PyFishPack/src/type_CenteredCyclicReductionUtility.f90 +1714 -0
  66. PyFishPack/src/type_CyclicReductionUtility.f90 +472 -0
  67. PyFishPack/src/type_FishpackWorkspace.f90 +290 -0
  68. PyFishPack/src/type_GeneralizedCyclicReductionUtility.f90 +1980 -0
  69. PyFishPack/src/type_PeriodicFastFourierTransform.f90 +3789 -0
  70. PyFishPack/src/type_SepAux.f90 +586 -0
  71. PyFishPack/src/type_StaggeredCyclicReductionUtility.f90 +893 -0
  72. pyfishpack-0.1.0.dist-info/DELVEWHEEL +2 -0
  73. pyfishpack-0.1.0.dist-info/METADATA +81 -0
  74. pyfishpack-0.1.0.dist-info/RECORD +81 -0
  75. pyfishpack-0.1.0.dist-info/WHEEL +5 -0
  76. pyfishpack-0.1.0.dist-info/licenses/LICENSE +21 -0
  77. pyfishpack-0.1.0.dist-info/top_level.txt +1 -0
  78. pyfishpack.libs/libgcc_s_seh-1-25d59ccffa1a9009644065b069829e07.dll +0 -0
  79. pyfishpack.libs/libgfortran-5-08f2195cfa0d823e13371c5c3186a82a.dll +0 -0
  80. pyfishpack.libs/libquadmath-0-c5abb9113f1ee64b87a889958e4b7418.dll +0 -0
  81. pyfishpack.libs/libwinpthread-1-83908d14abfafb8b3bfa38cf51ecee56.dll +0 -0
@@ -0,0 +1,1414 @@
1
+ C
2
+ C file cblktri.f
3
+ C
4
+ C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
5
+ C * *
6
+ C * copyright (c) 1999 by UCAR *
7
+ C * *
8
+ C * UNIVERSITY CORPORATION for ATMOSPHERIC RESEARCH *
9
+ C * *
10
+ C * all rights reserved *
11
+ C * *
12
+ C * FISHPACK version 4.1 *
13
+ C * *
14
+ C * A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE SOLUTION OF *
15
+ C * *
16
+ C * SEPARABLE ELLIPTIC PARTIAL DIFFERENTIAL EQUATIONS *
17
+ C * *
18
+ C * BY *
19
+ C * *
20
+ C * JOHN ADAMS, PAUL SWARZTRAUBER AND ROLAND SWEET *
21
+ C * *
22
+ C * OF *
23
+ C * *
24
+ C * THE NATIONAL CENTER FOR ATMOSPHERIC RESEARCH *
25
+ C * *
26
+ C * BOULDER, COLORADO (80307) U.S.A. *
27
+ C * *
28
+ C * WHICH IS SPONSORED BY *
29
+ C * *
30
+ C * THE NATIONAL SCIENCE FOUNDATION *
31
+ C * *
32
+ C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
33
+ C
34
+ SUBROUTINE CBLKTR (IFLG,NP,N,AN,BN,CN,MP,M,AM,BM,CM,IDIMY,Y,
35
+ + IERROR,W)
36
+ C
37
+ C
38
+ C DIMENSION OF AN(N),BN(N),CN(N),AM(M),BM(M),CM(M),Y(IDIMY,N),
39
+ C ARGUMENTS W(SEE ARGUMENT LIST)
40
+ C
41
+ C LATEST REVISION NOVEMBER 1988
42
+ C
43
+ C PURPOSE CBLKTR SOLVES A SYSTEM OF LINEAR EQUATIONS
44
+ C OF THE FORM
45
+ C
46
+ C AN(J)*X(I,J-1) + AM(I)*X(I-1,J) +
47
+ C (BN(J)+BM(I))*X(I,J) + CN(J)*X(I,J+1) +
48
+ C CM(I)*X(I+1,J) = Y(I,J)
49
+ C
50
+ C FOR I = 1,2,...,M AND J = 1,2,...,N.
51
+ C
52
+ C I+1 AND I-1 ARE EVALUATED MODULO M AND
53
+ C J+1 AND J-1 MODULO N, I.E.,
54
+ C
55
+ C X(I,0) = X(I,N), X(I,N+1) = X(I,1),
56
+ C X(0,J) = X(M,J), X(M+1,J) = X(1,J).
57
+ C
58
+ C THESE EQUATIONS USUALLY RESULT FROM THE
59
+ C DISCRETIZATION OF SEPARABLE ELLIPTIC
60
+ C EQUATIONS. BOUNDARY CONDITIONS MAY BE
61
+ C DIRICHLET, NEUMANN, OR PERIODIC.
62
+ C
63
+ C CBLKTRI IS A COMPLEX VERSION OF PACKAGE
64
+ C BLKTRI ON ULIB.
65
+ C
66
+ C USAGE CALL CBLKTR (IFLG,NP,N,AN,BN,CN,MP,M,AM,BM,
67
+ C CM,IDIMY,Y,IERROR,W)
68
+ C
69
+ C ARGUMENTS
70
+ C
71
+ C ON INPUT IFLG
72
+ C
73
+ C = 0 INITIALIZATION ONLY.
74
+ C CERTAIN QUANTITIES THAT DEPEND ON NP,
75
+ C N, AN, BN, AND CN ARE COMPUTED AND
76
+ C STORED IN THE WORK ARRAY W.
77
+ C
78
+ C = 1 THE QUANTITIES THAT WERE COMPUTED
79
+ C IN THE INITIALIZATION ARE USED
80
+ C TO OBTAIN THE SOLUTION X(I,J).
81
+ C
82
+ C NOTE:
83
+ C A CALL WITH IFLG=0 TAKES
84
+ C APPROXIMATELY ONE HALF THE TIME
85
+ C AS A CALL WITH IFLG = 1.
86
+ C HOWEVER, THE INITIALIZATION DOES
87
+ C NOT HAVE TO BE REPEATED UNLESS NP,
88
+ C N, AN, BN, OR CN CHANGE.
89
+ C
90
+ C NP
91
+ C = 0 IF AN(1) AND CN(N) ARE NOT ZERO,
92
+ C WHICH CORRESPONDS TO PERIODIC
93
+ C BOUNARY CONDITIONS.
94
+ C
95
+ C = 1 IF AN(1) AND CN(N) ARE ZERO.
96
+ C
97
+ C N
98
+ C THE NUMBER OF UNKNOWNS IN THE J-DIRECTION.
99
+ C N MUST BE GREATER THAN 4.
100
+ C THE OPERATION COUNT IS PROPORTIONAL TO
101
+ C MNLOG2(N), HENCE N SHOULD BE SELECTED
102
+ C LESS THAN OR EQUAL TO M.
103
+ C
104
+ C AN,BN,CN
105
+ C ONE-DIMENSIONAL ARRAYS OF LENGTH N
106
+ C THAT SPECIFY THE COEFFICIENTS IN THE
107
+ C LINEAR EQUATIONS GIVEN ABOVE.
108
+ C
109
+ C MP
110
+ C = 0 IF AM(1) AND CM(M) ARE NOT ZERO,
111
+ C WHICH CORRESPONDS TO PERIODIC
112
+ C BOUNDARY CONDITIONS.
113
+ C
114
+ C = 1 IF AM(1) = CM(M) = 0 .
115
+ C
116
+ C M
117
+ C THE NUMBER OF UNKNOWNS IN THE I-DIRECTION.
118
+ C M MUST BE GREATER THAN 4.
119
+ C
120
+ C AM,BM,CM
121
+ C COMPLEX ONE-DIMENSIONAL ARRAYS OF LENGTH M
122
+ C THAT SPECIFY THE COEFFICIENTS IN THE LINEAR
123
+ C EQUATIONS GIVEN ABOVE.
124
+ C
125
+ C IDIMY
126
+ C THE ROW (OR FIRST) DIMENSION OF THE
127
+ C TWO-DIMENSIONAL ARRAY Y AS IT APPEARS
128
+ C IN THE PROGRAM CALLING CBLKTR.
129
+ C THIS PARAMETER IS USED TO SPECIFY THE
130
+ C VARIABLE DIMENSION OF Y.
131
+ C IDIMY MUST BE AT LEAST M.
132
+ C
133
+ C Y
134
+ C A COMPLEX TWO-DIMENSIONAL ARRAY THAT
135
+ C SPECIFIES THE VALUES OF THE RIGHT SIDE OF
136
+ C THE LINEAR SYSTEM OF EQUATIONS GIVEN ABOVE.
137
+ C Y MUST BE DIMENSIONED Y(IDIMY,N) WITH
138
+ C IDIMY .GE. M.
139
+ C
140
+ C W
141
+ C A ONE-DIMENSIONAL ARRAY THAT MUST BE
142
+ C PROVIDED BY THE USER FOR WORK SPACE.
143
+ C
144
+ C IF NP=1 DEFINE K=INT(LOG2(N))+1 AND
145
+ C SET L=2**(K+1) THEN W MUST HAVE DIMENSION
146
+ C (K-2)*L+K+5+MAX(2N,12M)
147
+ C
148
+ C IF NP=0 DEFINE K=INT(LOG2(N-1))+1 AND
149
+ C SET L=2**(K+1) THEN W MUST HAVE DIMENSION
150
+ C (K-2)*L+K+5+2N+MAX(2N,12M)
151
+ C
152
+ C **IMPORTANT**
153
+ C FOR PURPOSES OF CHECKING, THE REQUIRED
154
+ C DIMENSION OF W IS COMPUTED BY CBLKTR AND
155
+ C STORED IN W(1) IN FLOATING POINT FORMAT.
156
+ C
157
+ C ARGUMENTS
158
+ C
159
+ C ON OUTPUT Y
160
+ C CONTAINS THE SOLUTION X.
161
+ C
162
+ C IERROR
163
+ C AN ERROR FLAG THAT INDICATES INVALID
164
+ C INPUT PARAMETERS. EXCEPT FOR NUMBER ZER0,
165
+ C A SOLUTION IS NOT ATTEMPTED.
166
+ C
167
+ C = 0 NO ERROR.
168
+ C = 1 M IS LESS THAN 5
169
+ C = 2 N IS LESS THAN 5
170
+ C = 3 IDIMY IS LESS THAN M.
171
+ C = 4 CBLKTR FAILED WHILE COMPUTING RESULTS
172
+ C THAT DEPEND ON THE COEFFICIENT ARRAYS
173
+ C AN, BN, CN. CHECK THESE ARRAYS.
174
+ C = 5 AN(J)*CN(J-1) IS LESS THAN 0 FOR SOME J.
175
+ C
176
+ C POSSIBLE REASONS FOR THIS CONDITION ARE
177
+ C 1. THE ARRAYS AN AND CN ARE NOT CORRECT
178
+ C 2. TOO LARGE A GRID SPACING WAS USED
179
+ C IN THE DISCRETIZATION OF THE ELLIPTIC
180
+ C EQUATION.
181
+ C 3. THE LINEAR EQUATIONS RESULTED FROM A
182
+ C PARTIAL DIFFERENTIAL EQUATION WHICH
183
+ C WAS NOT ELLIPTIC.
184
+ C
185
+ C W
186
+ C CONTAINS INTERMEDIATE VALUES THAT MUST
187
+ C NOT BE DESTROYED IF CBLKTR WILL BE CALLED
188
+ C AGAIN WITH IFLG=1. W(1) CONTAINS THE
189
+ C NUMBER OF LOCATIONS REQUIRED BY W IN
190
+ C FLOATING POINT FORMAT.
191
+ C
192
+ C
193
+ C SPECIAL CONDITIONS THE ALGORITHM MAY FAIL IF ABS(BM(I)+BN(J))
194
+ C IS LESS THAN ABS(AM(I))+ABS(AN(J))+
195
+ C ABS(CM(I))+ABS(CN(J))
196
+ C FOR SOME I AND J. THE ALGORITHM WILL ALSO
197
+ C FAIL IF AN(J)*CN(J-1) IS LESS THAN ZERO FOR
198
+ C SOME J.
199
+ C SEE THE DESCRIPTION OF THE OUTPUT PARAMETER
200
+ C IERROR.
201
+ C
202
+ C
203
+ C I/O NONE
204
+ C
205
+ C PRECISION SINGLE
206
+ C
207
+ C REQUIRED LIBRARY COMF FROM FISHPACK
208
+ C FILES
209
+ C
210
+ C LANGUAGE FORTRAN
211
+ C
212
+ C HISTORY WRITTEN BY PAUL SWARZTRAUBER AT NCAR IN
213
+ C THE EARLY 1970'S. REWRITTEN AN RELEASED
214
+ C ON NCAR'S PUBLIC SOFTWARE LIBRARIES IN
215
+ C JANUARY, 1980.
216
+ C
217
+ C ALGORITHM GENERALIZED CYCLIC REDUCTION
218
+ C (SEE REFERENCE BELOW)
219
+ C
220
+ C PORTABILITY FORTRAN 77
221
+ C THE APPROXIMATE MACHINE ACCURACY IS COMPUTED
222
+ C IN FUNCTION EPMACH
223
+ C
224
+ C REFERENCES SWARZTRAUBER,P. AND R. SWEET, 'EFFICIENT
225
+ C FORTRAN SUBPROGRAMS FOR THE SOLUTION OF
226
+ C ELLIPTIC EQUATIONS'
227
+ C NCAR TN/IA-109, JULY, 1975, 138 PP.
228
+ C
229
+ C SWARZTRAUBER P. N.,A DIRECT METHOD FOR
230
+ C THE DISCRETE SOLUTION OF SEPARABLE
231
+ C ELLIPTIC EQUATIONS, S.I.A.M.
232
+ C J. NUMER. ANAL.,11(1974) PP. 1136-1150.
233
+ C
234
+ C***********************************************************************
235
+ DIMENSION AN(*) ,BN(*) ,CN(*) ,AM(*) ,
236
+ 1 BM(*) ,CM(*) ,Y(IDIMY,1) ,W(*)
237
+ EXTERNAL PROC ,PROCP ,CPROC ,CPROCP
238
+ COMMON /CCBLK/ NPP ,K ,EPS ,CNV ,
239
+ 1 NM ,NCMPLX ,IK
240
+ COMPLEX AM ,BM ,CM ,Y
241
+ C
242
+ C TEST M AND N FOR THE PROPER FORM
243
+ C
244
+ NM = N
245
+ M2 = M+M
246
+ IERROR = 0
247
+ IF (M-5) 101,102,102
248
+ 101 IERROR = 1
249
+ GO TO 119
250
+ 102 IF (NM-3) 103,104,104
251
+ 103 IERROR = 2
252
+ GO TO 119
253
+ 104 IF (IDIMY-M) 105,106,106
254
+ 105 IERROR = 3
255
+ GO TO 119
256
+ 106 NH = N
257
+ NPP = NP
258
+ IF (NPP) 107,108,107
259
+ 107 NH = NH+1
260
+ 108 IK = 2
261
+ K = 1
262
+ 109 IK = IK+IK
263
+ K = K+1
264
+ IF (NH-IK) 110,110,109
265
+ 110 NL = IK
266
+ IK = IK+IK
267
+ NL = NL-1
268
+ IWAH = (K-2)*IK+K+6
269
+ IF (NPP) 111,112,111
270
+ C
271
+ C DIVIDE W INTO WORKING SUB ARRAYS
272
+ C
273
+ 111 IW1 = IWAH
274
+ IWBH = IW1+NM
275
+ W(1) = FLOAT(IW1-1+MAX0(2*NM,12*M))
276
+ GO TO 113
277
+ 112 IWBH = IWAH+NM+NM
278
+ IW1 = IWBH
279
+ W(1) = FLOAT(IW1-1+MAX0(2*NM,12*M))
280
+ NM = NM-1
281
+ C
282
+ C SUBROUTINE COMP B COMPUTES THE ROOTS OF THE B POLYNOMIALS
283
+ C
284
+ 113 IF (IERROR) 119,114,119
285
+ 114 IW2 = IW1+M2
286
+ IW3 = IW2+M2
287
+ IWD = IW3+M2
288
+ IWW = IWD+M2
289
+ IWU = IWW+M2
290
+ IF (IFLG) 116,115,116
291
+ 115 CALL CCOMPB (NL,IERROR,AN,BN,CN,W(2),W(IWAH),W(IWBH))
292
+ GO TO 119
293
+ 116 IF (MP) 117,118,117
294
+ C
295
+ C SUBROUTINE BLKTR1 SOLVES THE LINEAR SYSTEM
296
+ C
297
+ 117 CALL CBLKT1 (NL,AN,BN,CN,M,AM,BM,CM,IDIMY,Y,W(2),W(IW1),W(IW2),
298
+ 1 W(IW3),W(IWD),W(IWW),W(IWU),PROC,CPROC)
299
+ GO TO 119
300
+ 118 CALL CBLKT1 (NL,AN,BN,CN,M,AM,BM,CM,IDIMY,Y,W(2),W(IW1),W(IW2),
301
+ 1 W(IW3),W(IWD),W(IWW),W(IWU),PROCP,CPROCP)
302
+ 119 CONTINUE
303
+ RETURN
304
+ END
305
+ SUBROUTINE CBLKT1 (N,AN,BN,CN,M,AM,BM,CM,IDIMY,Y,B,W1,W2,W3,WD,
306
+ 1 WW,WU,PRDCT,CPRDCT)
307
+ C
308
+ C CBLKT1 SOLVES THE LINEAR SYSTEM
309
+ C
310
+ C B CONTAINS THE ROOTS OF ALL THE B POLYNOMIALS
311
+ C W1,W2,W3,WD,WW,WU ARE ALL WORKING ARRAYS
312
+ C PRDCT IS EITHER PROCP OR PROC DEPENDING ON WHETHER THE BOUNDARY
313
+ C CONDITIONS IN THE M DIRECTION ARE PERIODIC OR NOT
314
+ C CPRDCT IS EITHER CPROCP OR CPROC WHICH ARE CALLED IF SOME OF THE ZEROS
315
+ C OF THE B POLYNOMIALS ARE COMPLEX.
316
+ C
317
+ C
318
+ DIMENSION AN(*) ,BN(*) ,CN(*) ,AM(*) ,
319
+ 1 BM(*) ,CM(*) ,B(*) ,W1(*) ,
320
+ 2 W2(*) ,W3(*) ,WD(*) ,WW(*) ,
321
+ 3 WU(*) ,Y(IDIMY,1)
322
+ COMMON /CCBLK/ NPP ,K ,EPS ,CNV ,
323
+ 1 NM ,NCMPLX ,IK
324
+ COMPLEX AM ,BM ,CM ,Y ,
325
+ 1 W1 ,W2 ,W3 ,WD ,
326
+ 2 WW ,WU
327
+ C
328
+ C BEGIN REDUCTION PHASE
329
+ C
330
+ KDO = K-1
331
+ DO 109 L=1,KDO
332
+ IR = L-1
333
+ I2 = 2**IR
334
+ I1 = I2/2
335
+ I3 = I2+I1
336
+ I4 = I2+I2
337
+ IRM1 = IR-1
338
+ CALL CINDXB (I2,IR,IM2,NM2)
339
+ CALL CINDXB (I1,IRM1,IM3,NM3)
340
+ CALL CINDXB (I3,IRM1,IM1,NM1)
341
+ CALL PRDCT (NM2,B(IM2),NM3,B(IM3),NM1,B(IM1),0,DUM,Y(1,I2),W3,
342
+ 1 M,AM,BM,CM,WD,WW,WU)
343
+ IF = 2**K
344
+ DO 108 I=I4,IF,I4
345
+ IF (I-NM) 101,101,108
346
+ 101 IPI1 = I+I1
347
+ IPI2 = I+I2
348
+ IPI3 = I+I3
349
+ CALL CINDXC (I,IR,IDXC,NC)
350
+ IF (I-IF) 102,108,108
351
+ 102 CALL CINDXA (I,IR,IDXA,NA)
352
+ CALL CINDXB (I-I1,IRM1,IM1,NM1)
353
+ CALL CINDXB (IPI2,IR,IP2,NP2)
354
+ CALL CINDXB (IPI1,IRM1,IP1,NP1)
355
+ CALL CINDXB (IPI3,IRM1,IP3,NP3)
356
+ CALL PRDCT (NM1,B(IM1),0,DUM,0,DUM,NA,AN(IDXA),W3,W1,M,AM,
357
+ 1 BM,CM,WD,WW,WU)
358
+ IF (IPI2-NM) 105,105,103
359
+ 103 DO 104 J=1,M
360
+ W3(J) = (0.,0.)
361
+ W2(J) = (0.,0.)
362
+ 104 CONTINUE
363
+ GO TO 106
364
+ 105 CALL PRDCT (NP2,B(IP2),NP1,B(IP1),NP3,B(IP3),0,DUM,
365
+ 1 Y(1,IPI2),W3,M,AM,BM,CM,WD,WW,WU)
366
+ CALL PRDCT (NP1,B(IP1),0,DUM,0,DUM,NC,CN(IDXC),W3,W2,M,AM,
367
+ 1 BM,CM,WD,WW,WU)
368
+ 106 DO 107 J=1,M
369
+ Y(J,I) = W1(J)+W2(J)+Y(J,I)
370
+ 107 CONTINUE
371
+ 108 CONTINUE
372
+ 109 CONTINUE
373
+ IF (NPP) 132,110,132
374
+ C
375
+ C THE PERIODIC CASE IS TREATED USING THE CAPACITANCE MATRIX METHOD
376
+ C
377
+ 110 IF = 2**K
378
+ I = IF/2
379
+ I1 = I/2
380
+ CALL CINDXB (I-I1,K-2,IM1,NM1)
381
+ CALL CINDXB (I+I1,K-2,IP1,NP1)
382
+ CALL CINDXB (I,K-1,IZ,NZ)
383
+ CALL PRDCT (NZ,B(IZ),NM1,B(IM1),NP1,B(IP1),0,DUM,Y(1,I),W1,M,AM,
384
+ 1 BM,CM,WD,WW,WU)
385
+ IZR = I
386
+ DO 111 J=1,M
387
+ W2(J) = W1(J)
388
+ 111 CONTINUE
389
+ DO 113 LL=2,K
390
+ L = K-LL+1
391
+ IR = L-1
392
+ I2 = 2**IR
393
+ I1 = I2/2
394
+ I = I2
395
+ CALL CINDXC (I,IR,IDXC,NC)
396
+ CALL CINDXB (I,IR,IZ,NZ)
397
+ CALL CINDXB (I-I1,IR-1,IM1,NM1)
398
+ CALL CINDXB (I+I1,IR-1,IP1,NP1)
399
+ CALL PRDCT (NP1,B(IP1),0,DUM,0,DUM,NC,CN(IDXC),W1,W1,M,AM,BM,
400
+ 1 CM,WD,WW,WU)
401
+ DO 112 J=1,M
402
+ W1(J) = Y(J,I)+W1(J)
403
+ 112 CONTINUE
404
+ CALL PRDCT (NZ,B(IZ),NM1,B(IM1),NP1,B(IP1),0,DUM,W1,W1,M,AM,
405
+ 1 BM,CM,WD,WW,WU)
406
+ 113 CONTINUE
407
+ DO 118 LL=2,K
408
+ L = K-LL+1
409
+ IR = L-1
410
+ I2 = 2**IR
411
+ I1 = I2/2
412
+ I4 = I2+I2
413
+ IFD = IF-I2
414
+ DO 117 I=I2,IFD,I4
415
+ IF (I-I2-IZR) 117,114,117
416
+ 114 IF (I-NM) 115,115,118
417
+ 115 CALL CINDXA (I,IR,IDXA,NA)
418
+ CALL CINDXB (I,IR,IZ,NZ)
419
+ CALL CINDXB (I-I1,IR-1,IM1,NM1)
420
+ CALL CINDXB (I+I1,IR-1,IP1,NP1)
421
+ CALL PRDCT (NM1,B(IM1),0,DUM,0,DUM,NA,AN(IDXA),W2,W2,M,AM,
422
+ 1 BM,CM,WD,WW,WU)
423
+ DO 116 J=1,M
424
+ W2(J) = Y(J,I)+W2(J)
425
+ 116 CONTINUE
426
+ CALL PRDCT (NZ,B(IZ),NM1,B(IM1),NP1,B(IP1),0,DUM,W2,W2,M,
427
+ 1 AM,BM,CM,WD,WW,WU)
428
+ IZR = I
429
+ IF (I-NM) 117,119,117
430
+ 117 CONTINUE
431
+ 118 CONTINUE
432
+ 119 DO 120 J=1,M
433
+ Y(J,NM+1) = Y(J,NM+1)-CN(NM+1)*W1(J)-AN(NM+1)*W2(J)
434
+ 120 CONTINUE
435
+ CALL CINDXB (IF/2,K-1,IM1,NM1)
436
+ CALL CINDXB (IF,K-1,IP,NP)
437
+ IF (NCMPLX) 121,122,121
438
+ 121 CALL CPRDCT (NM+1,B(IP),NM1,B(IM1),0,DUM,0,DUM,Y(1,NM+1),
439
+ 1 Y(1,NM+1),M,AM,BM,CM,W1,W3,WW)
440
+ GO TO 123
441
+ 122 CALL PRDCT (NM+1,B(IP),NM1,B(IM1),0,DUM,0,DUM,Y(1,NM+1),
442
+ 1 Y(1,NM+1),M,AM,BM,CM,WD,WW,WU)
443
+ 123 DO 124 J=1,M
444
+ W1(J) = AN(1)*Y(J,NM+1)
445
+ W2(J) = CN(NM)*Y(J,NM+1)
446
+ Y(J,1) = Y(J,1)-W1(J)
447
+ Y(J,NM) = Y(J,NM)-W2(J)
448
+ 124 CONTINUE
449
+ DO 126 L=1,KDO
450
+ IR = L-1
451
+ I2 = 2**IR
452
+ I4 = I2+I2
453
+ I1 = I2/2
454
+ I = I4
455
+ CALL CINDXA (I,IR,IDXA,NA)
456
+ CALL CINDXB (I-I2,IR,IM2,NM2)
457
+ CALL CINDXB (I-I2-I1,IR-1,IM3,NM3)
458
+ CALL CINDXB (I-I1,IR-1,IM1,NM1)
459
+ CALL PRDCT (NM2,B(IM2),NM3,B(IM3),NM1,B(IM1),0,DUM,W1,W1,M,AM,
460
+ 1 BM,CM,WD,WW,WU)
461
+ CALL PRDCT (NM1,B(IM1),0,DUM,0,DUM,NA,AN(IDXA),W1,W1,M,AM,BM,
462
+ 1 CM,WD,WW,WU)
463
+ DO 125 J=1,M
464
+ Y(J,I) = Y(J,I)-W1(J)
465
+ 125 CONTINUE
466
+ 126 CONTINUE
467
+ C
468
+ IZR = NM
469
+ DO 131 L=1,KDO
470
+ IR = L-1
471
+ I2 = 2**IR
472
+ I1 = I2/2
473
+ I3 = I2+I1
474
+ I4 = I2+I2
475
+ IRM1 = IR-1
476
+ DO 130 I=I4,IF,I4
477
+ IPI1 = I+I1
478
+ IPI2 = I+I2
479
+ IPI3 = I+I3
480
+ IF (IPI2-IZR) 127,128,127
481
+ 127 IF (I-IZR) 130,131,130
482
+ 128 CALL CINDXC (I,IR,IDXC,NC)
483
+ CALL CINDXB (IPI2,IR,IP2,NP2)
484
+ CALL CINDXB (IPI1,IRM1,IP1,NP1)
485
+ CALL CINDXB (IPI3,IRM1,IP3,NP3)
486
+ CALL PRDCT (NP2,B(IP2),NP1,B(IP1),NP3,B(IP3),0,DUM,W2,W2,M,
487
+ 1 AM,BM,CM,WD,WW,WU)
488
+ CALL PRDCT (NP1,B(IP1),0,DUM,0,DUM,NC,CN(IDXC),W2,W2,M,AM,
489
+ 1 BM,CM,WD,WW,WU)
490
+ DO 129 J=1,M
491
+ Y(J,I) = Y(J,I)-W2(J)
492
+ 129 CONTINUE
493
+ IZR = I
494
+ GO TO 131
495
+ 130 CONTINUE
496
+ 131 CONTINUE
497
+ C
498
+ C BEGIN BACK SUBSTITUTION PHASE
499
+ C
500
+ 132 DO 144 LL=1,K
501
+ L = K-LL+1
502
+ IR = L-1
503
+ IRM1 = IR-1
504
+ I2 = 2**IR
505
+ I1 = I2/2
506
+ I4 = I2+I2
507
+ IFD = IF-I2
508
+ DO 143 I=I2,IFD,I4
509
+ IF (I-NM) 133,133,143
510
+ 133 IMI1 = I-I1
511
+ IMI2 = I-I2
512
+ IPI1 = I+I1
513
+ IPI2 = I+I2
514
+ CALL CINDXA (I,IR,IDXA,NA)
515
+ CALL CINDXC (I,IR,IDXC,NC)
516
+ CALL CINDXB (I,IR,IZ,NZ)
517
+ CALL CINDXB (IMI1,IRM1,IM1,NM1)
518
+ CALL CINDXB (IPI1,IRM1,IP1,NP1)
519
+ IF (I-I2) 134,134,136
520
+ 134 DO 135 J=1,M
521
+ W1(J) = (0.,0.)
522
+ 135 CONTINUE
523
+ GO TO 137
524
+ 136 CALL PRDCT (NM1,B(IM1),0,DUM,0,DUM,NA,AN(IDXA),Y(1,IMI2),
525
+ 1 W1,M,AM,BM,CM,WD,WW,WU)
526
+ 137 IF (IPI2-NM) 140,140,138
527
+ 138 DO 139 J=1,M
528
+ W2(J) = (0.,0.)
529
+ 139 CONTINUE
530
+ GO TO 141
531
+ 140 CALL PRDCT (NP1,B(IP1),0,DUM,0,DUM,NC,CN(IDXC),Y(1,IPI2),
532
+ 1 W2,M,AM,BM,CM,WD,WW,WU)
533
+ 141 DO 142 J=1,M
534
+ W1(J) = Y(J,I)+W1(J)+W2(J)
535
+ 142 CONTINUE
536
+ CALL PRDCT (NZ,B(IZ),NM1,B(IM1),NP1,B(IP1),0,DUM,W1,Y(1,I),
537
+ 1 M,AM,BM,CM,WD,WW,WU)
538
+ 143 CONTINUE
539
+ 144 CONTINUE
540
+ RETURN
541
+ END
542
+ FUNCTION CBSRH (XLL,XRR,IZ,C,A,BH,F,SGN)
543
+ DIMENSION A(*) ,C(*) ,BH(*)
544
+ COMMON /CCBLK/ NPP ,K ,EPS ,CNV ,
545
+ 1 NM ,NCMPLX ,IK
546
+ XL = XLL
547
+ XR = XRR
548
+ DX = .5*ABS(XR-XL)
549
+ 101 X = .5*(XL+XR)
550
+ IF (SGN*F(X,IZ,C,A,BH)) 103,105,102
551
+ 102 XR = X
552
+ GO TO 104
553
+ 103 XL = X
554
+ 104 DX = .5*DX
555
+ IF (DX-CNV) 105,105,101
556
+ 105 CBSRH = .5*(XL+XR)
557
+ RETURN
558
+ END
559
+ SUBROUTINE CCOMPB (N,IERROR,AN,BN,CN,B,AH,BH)
560
+ C
561
+ C CCOMPB COMPUTES THE ROOTS OF THE B POLYNOMIALS USING SUBROUTINE
562
+ C CTEVLS WHICH IS A MODIFICATION THE EISPACK PROGRAM TQLRAT.
563
+ C IERROR IS SET TO 4 IF EITHER CTEVLS FAILS OR IF A(J+1)*C(J) IS
564
+ C LESS THAN ZERO FOR SOME J. AH,BH ARE TEMPORARY WORK ARRAYS.
565
+ C
566
+ DIMENSION AN(*) ,BN(*) ,CN(*) ,B(*) ,
567
+ 1 AH(*) ,BH(*)
568
+ COMMON /CCBLK/ NPP ,K ,EPS ,CNV ,
569
+ 1 NM ,NCMPLX ,IK
570
+ EPS = EPMACH(DUM)
571
+ BNORM = ABS(BN(1))
572
+ DO 102 J=2,NM
573
+ BNORM = AMAX1(BNORM,ABS(BN(J)))
574
+ ARG = AN(J)*CN(J-1)
575
+ IF (ARG) 119,101,101
576
+ 101 B(J) = SIGN(SQRT(ARG),AN(J))
577
+ 102 CONTINUE
578
+ CNV = EPS*BNORM
579
+ IF = 2**K
580
+ KDO = K-1
581
+ DO 108 L=1,KDO
582
+ IR = L-1
583
+ I2 = 2**IR
584
+ I4 = I2+I2
585
+ IPL = I4-1
586
+ IFD = IF-I4
587
+ DO 107 I=I4,IFD,I4
588
+ CALL CINDXB (I,L,IB,NB)
589
+ IF (NB) 108,108,103
590
+ 103 JS = I-IPL
591
+ JF = JS+NB-1
592
+ LS = 0
593
+ DO 104 J=JS,JF
594
+ LS = LS+1
595
+ BH(LS) = BN(J)
596
+ AH(LS) = B(J)
597
+ 104 CONTINUE
598
+ CALL CTEVLS (NB,BH,AH,IERROR)
599
+ IF (IERROR) 118,105,118
600
+ 105 LH = IB-1
601
+ DO 106 J=1,NB
602
+ LH = LH+1
603
+ B(LH) = -BH(J)
604
+ 106 CONTINUE
605
+ 107 CONTINUE
606
+ 108 CONTINUE
607
+ DO 109 J=1,NM
608
+ B(J) = -BN(J)
609
+ 109 CONTINUE
610
+ IF (NPP) 117,110,117
611
+ 110 NMP = NM+1
612
+ NB = NM+NMP
613
+ DO 112 J=1,NB
614
+ L1 = MOD(J-1,NMP)+1
615
+ L2 = MOD(J+NM-1,NMP)+1
616
+ ARG = AN(L1)*CN(L2)
617
+ IF (ARG) 119,111,111
618
+ 111 BH(J) = SIGN(SQRT(ARG),-AN(L1))
619
+ AH(J) = -BN(L1)
620
+ 112 CONTINUE
621
+ CALL CTEVLS (NB,AH,BH,IERROR)
622
+ IF (IERROR) 118,113,118
623
+ 113 CALL CINDXB (IF,K-1,J2,LH)
624
+ CALL CINDXB (IF/2,K-1,J1,LH)
625
+ J2 = J2+1
626
+ LH = J2
627
+ N2M2 = J2+NM+NM-2
628
+ 114 D1 = ABS(B(J1)-B(J2-1))
629
+ D2 = ABS(B(J1)-B(J2))
630
+ D3 = ABS(B(J1)-B(J2+1))
631
+ IF ((D2 .LT. D1) .AND. (D2 .LT. D3)) GO TO 115
632
+ B(LH) = B(J2)
633
+ J2 = J2+1
634
+ LH = LH+1
635
+ IF (J2-N2M2) 114,114,116
636
+ 115 J2 = J2+1
637
+ J1 = J1+1
638
+ IF (J2-N2M2) 114,114,116
639
+ 116 B(LH) = B(N2M2+1)
640
+ CALL CINDXB (IF,K-1,J1,J2)
641
+ J2 = J1+NMP+NMP
642
+ CALL CPPADD (NM+1,IERROR,AN,CN,B(J1),B(J1),B(J2))
643
+ 117 RETURN
644
+ 118 IERROR = 4
645
+ RETURN
646
+ 119 IERROR = 5
647
+ RETURN
648
+ END
649
+ SUBROUTINE CPROC (ND,BD,NM1,BM1,NM2,BM2,NA,AA,X,Y,M,A,B,C,D,W,YY)
650
+ C
651
+ C PROC APPLIES A SEQUENCE OF MATRIX OPERATIONS TO THE VECTOR X AND
652
+ C STORES THE RESULT IN Y
653
+ C AA ARRAY CONTAINING SCALAR MULTIPLIERS OF THE VECTOR X
654
+ C ND,NM1,NM2 ARE THE LENGTHS OF THE ARRAYS BD,BM1,BM2 RESPECTIVELY
655
+ C BD,BM1,BM2 ARE ARRAYS CONTAINING ROOTS OF CERTIAN B POLYNOMIALS
656
+ C NA IS THE LENGTH OF THE ARRAY AA
657
+ C X,Y THE MATRIX OPERATIONS ARE APPLIED TO X AND THE RESULT IS Y
658
+ C A,B,C ARE ARRAYS WHICH CONTAIN THE TRIDIAGONAL MATRIX
659
+ C M IS THE ORDER OF THE MATRIX
660
+ C D,W ARE WORK ARRAYS
661
+ C ISGN DETERMINES WHETHER OR NOT A CHANGE IN SIGN IS MADE
662
+ C
663
+ COMPLEX Y ,D ,W ,BD ,
664
+ 1 CRT ,DEN ,Y1 ,Y2 ,
665
+ 2 X ,A ,B ,C
666
+ DIMENSION A(*) ,B(*) ,C(*) ,X(*) ,
667
+ 1 Y(*) ,D(*) ,W(*) ,BD(*) ,
668
+ 2 BM1(*) ,BM2(*) ,AA(*) ,YY(*)
669
+ DO 101 J=1,M
670
+ Y(J) = X(J)
671
+ 101 CONTINUE
672
+ MM = M-1
673
+ ID = ND
674
+ M1 = NM1
675
+ M2 = NM2
676
+ IA = NA
677
+ 102 IFLG = 0
678
+ IF (ID) 109,109,103
679
+ 103 CRT = BD(ID)
680
+ ID = ID-1
681
+ C
682
+ C BEGIN SOLUTION TO SYSTEM
683
+ C
684
+ D(M) = A(M)/(B(M)-CRT)
685
+ W(M) = Y(M)/(B(M)-CRT)
686
+ DO 104 J=2,MM
687
+ K = M-J
688
+ DEN = B(K+1)-CRT-C(K+1)*D(K+2)
689
+ D(K+1) = A(K+1)/DEN
690
+ W(K+1) = (Y(K+1)-C(K+1)*W(K+2))/DEN
691
+ 104 CONTINUE
692
+ DEN = B(1)-CRT-C(1)*D(2)
693
+ IF (CABS(DEN)) 105,106,105
694
+ 105 Y(1) = (Y(1)-C(1)*W(2))/DEN
695
+ GO TO 107
696
+ 106 Y(1) = (1.,0.)
697
+ 107 DO 108 J=2,M
698
+ Y(J) = W(J)-D(J)*Y(J-1)
699
+ 108 CONTINUE
700
+ 109 IF (M1) 110,110,112
701
+ 110 IF (M2) 121,121,111
702
+ 111 RT = BM2(M2)
703
+ M2 = M2-1
704
+ GO TO 117
705
+ 112 IF (M2) 113,113,114
706
+ 113 RT = BM1(M1)
707
+ M1 = M1-1
708
+ GO TO 117
709
+ 114 IF (ABS(BM1(M1))-ABS(BM2(M2))) 116,116,115
710
+ 115 RT = BM1(M1)
711
+ M1 = M1-1
712
+ GO TO 117
713
+ 116 RT = BM2(M2)
714
+ M2 = M2-1
715
+ 117 Y1 = (B(1)-RT)*Y(1)+C(1)*Y(2)
716
+ IF (MM-2) 120,118,118
717
+ C
718
+ C MATRIX MULTIPLICATION
719
+ C
720
+ 118 DO 119 J=2,MM
721
+ Y2 = A(J)*Y(J-1)+(B(J)-RT)*Y(J)+C(J)*Y(J+1)
722
+ Y(J-1) = Y1
723
+ Y1 = Y2
724
+ 119 CONTINUE
725
+ 120 Y(M) = A(M)*Y(M-1)+(B(M)-RT)*Y(M)
726
+ Y(M-1) = Y1
727
+ IFLG = 1
728
+ GO TO 102
729
+ 121 IF (IA) 124,124,122
730
+ 122 RT = AA(IA)
731
+ IA = IA-1
732
+ IFLG = 1
733
+ C
734
+ C SCALAR MULTIPLICATION
735
+ C
736
+ DO 123 J=1,M
737
+ Y(J) = RT*Y(J)
738
+ 123 CONTINUE
739
+ 124 IF (IFLG) 125,125,102
740
+ 125 RETURN
741
+ END
742
+ SUBROUTINE CPROCP (ND,BD,NM1,BM1,NM2,BM2,NA,AA,X,Y,M,A,B,C,D,U,YY)
743
+ C
744
+ C CPROCP APPLIES A SEQUENCE OF MATRIX OPERATIONS TO THE VECTOR X AND
745
+ C STORES THE RESULT IN Y
746
+ C
747
+ C BD,BM1,BM2 ARE ARRAYS CONTAINING ROOTS OF CERTIAN B POLYNOMIALS
748
+ C ND,NM1,NM2 ARE THE LENGTHS OF THE ARRAYS BD,BM1,BM2 RESPECTIVELY
749
+ C AA ARRAY CONTAINING SCALAR MULTIPLIERS OF THE VECTOR X
750
+ C NA IS THE LENGTH OF THE ARRAY AA
751
+ C X,Y THE MATRIX OPERATIONS ARE APPLIED TO X AND THE RESULT IS Y
752
+ C A,B,C ARE ARRAYS WHICH CONTAIN THE TRIDIAGONAL MATRIX
753
+ C M IS THE ORDER OF THE MATRIX
754
+ C D,U ARE WORK ARRAYS
755
+ C ISGN DETERMINES WHETHER OR NOT A CHANGE IN SIGN IS MADE
756
+ C
757
+ COMPLEX Y ,D ,U ,V ,
758
+ 1 DEN ,BH ,YM ,AM ,
759
+ 2 Y1 ,Y2 ,YH ,BD ,
760
+ 3 CRT ,X ,A ,B ,C
761
+ DIMENSION A(*) ,B(*) ,C(*) ,X(*) ,
762
+ 1 Y(*) ,D(*) ,U(*) ,BD(*) ,
763
+ 2 BM1(*) ,BM2(*) ,AA(*) ,YY(*)
764
+ DO 101 J=1,M
765
+ Y(J) = X(J)
766
+ 101 CONTINUE
767
+ MM = M-1
768
+ MM2 = M-2
769
+ ID = ND
770
+ M1 = NM1
771
+ M2 = NM2
772
+ IA = NA
773
+ 102 IFLG = 0
774
+ IF (ID) 111,111,103
775
+ 103 CRT = BD(ID)
776
+ ID = ID-1
777
+ IFLG = 1
778
+ C
779
+ C BEGIN SOLUTION TO SYSTEM
780
+ C
781
+ BH = B(M)-CRT
782
+ YM = Y(M)
783
+ DEN = B(1)-CRT
784
+ D(1) = C(1)/DEN
785
+ U(1) = A(1)/DEN
786
+ Y(1) = Y(1)/DEN
787
+ V = C(M)
788
+ IF (MM2-2) 106,104,104
789
+ 104 DO 105 J=2,MM2
790
+ DEN = B(J)-CRT-A(J)*D(J-1)
791
+ D(J) = C(J)/DEN
792
+ U(J) = -A(J)*U(J-1)/DEN
793
+ Y(J) = (Y(J)-A(J)*Y(J-1))/DEN
794
+ BH = BH-V*U(J-1)
795
+ YM = YM-V*Y(J-1)
796
+ V = -V*D(J-1)
797
+ 105 CONTINUE
798
+ 106 DEN = B(M-1)-CRT-A(M-1)*D(M-2)
799
+ D(M-1) = (C(M-1)-A(M-1)*U(M-2))/DEN
800
+ Y(M-1) = (Y(M-1)-A(M-1)*Y(M-2))/DEN
801
+ AM = A(M)-V*D(M-2)
802
+ BH = BH-V*U(M-2)
803
+ YM = YM-V*Y(M-2)
804
+ DEN = BH-AM*D(M-1)
805
+ IF (CABS(DEN)) 107,108,107
806
+ 107 Y(M) = (YM-AM*Y(M-1))/DEN
807
+ GO TO 109
808
+ 108 Y(M) = (1.,0.)
809
+ 109 Y(M-1) = Y(M-1)-D(M-1)*Y(M)
810
+ DO 110 J=2,MM
811
+ K = M-J
812
+ Y(K) = Y(K)-D(K)*Y(K+1)-U(K)*Y(M)
813
+ 110 CONTINUE
814
+ 111 IF (M1) 112,112,114
815
+ 112 IF (M2) 123,123,113
816
+ 113 RT = BM2(M2)
817
+ M2 = M2-1
818
+ GO TO 119
819
+ 114 IF (M2) 115,115,116
820
+ 115 RT = BM1(M1)
821
+ M1 = M1-1
822
+ GO TO 119
823
+ 116 IF (ABS(BM1(M1))-ABS(BM2(M2))) 118,118,117
824
+ 117 RT = BM1(M1)
825
+ M1 = M1-1
826
+ GO TO 119
827
+ 118 RT = BM2(M2)
828
+ M2 = M2-1
829
+ C
830
+ C MATRIX MULTIPLICATION
831
+ C
832
+ 119 YH = Y(1)
833
+ Y1 = (B(1)-RT)*Y(1)+C(1)*Y(2)+A(1)*Y(M)
834
+ IF (MM-2) 122,120,120
835
+ 120 DO 121 J=2,MM
836
+ Y2 = A(J)*Y(J-1)+(B(J)-RT)*Y(J)+C(J)*Y(J+1)
837
+ Y(J-1) = Y1
838
+ Y1 = Y2
839
+ 121 CONTINUE
840
+ 122 Y(M) = A(M)*Y(M-1)+(B(M)-RT)*Y(M)+C(M)*YH
841
+ Y(M-1) = Y1
842
+ IFLG = 1
843
+ GO TO 102
844
+ 123 IF (IA) 126,126,124
845
+ 124 RT = AA(IA)
846
+ IA = IA-1
847
+ IFLG = 1
848
+ C
849
+ C SCALAR MULTIPLICATION
850
+ C
851
+ DO 125 J=1,M
852
+ Y(J) = RT*Y(J)
853
+ 125 CONTINUE
854
+ 126 IF (IFLG) 127,127,102
855
+ 127 RETURN
856
+ END
857
+ SUBROUTINE CINDXA (I,IR,IDXA,NA)
858
+ COMMON /CCBLK/ NPP ,K ,EPS ,CNV ,
859
+ 1 NM ,NCMPLX ,IK
860
+ NA = 2**IR
861
+ IDXA = I-NA+1
862
+ IF (I-NM) 102,102,101
863
+ 101 NA = 0
864
+ 102 RETURN
865
+ END
866
+ SUBROUTINE CINDXB (I,IR,IDX,IDP)
867
+ C
868
+ C B(IDX) IS THE LOCATION OF THE FIRST ROOT OF THE B(I,IR) POLYNOMIAL
869
+ C
870
+ COMMON /CCBLK/ NPP ,K ,EPS ,CNV ,
871
+ 1 NM ,NCMPLX ,IK
872
+ IDP = 0
873
+ IF (IR) 107,101,103
874
+ 101 IF (I-NM) 102,102,107
875
+ 102 IDX = I
876
+ IDP = 1
877
+ RETURN
878
+ 103 IZH = 2**IR
879
+ ID = I-IZH-IZH
880
+ IDX = ID+ID+(IR-1)*IK+IR+(IK-I)/IZH+4
881
+ IPL = IZH-1
882
+ IDP = IZH+IZH-1
883
+ IF (I-IPL-NM) 105,105,104
884
+ 104 IDP = 0
885
+ RETURN
886
+ 105 IF (I+IPL-NM) 107,107,106
887
+ 106 IDP = NM+IPL-I+1
888
+ 107 RETURN
889
+ END
890
+ SUBROUTINE CINDXC (I,IR,IDXC,NC)
891
+ COMMON /CCBLK/ NPP ,K ,EPS ,CNV ,
892
+ 1 NM ,NCMPLX ,IK
893
+ NC = 2**IR
894
+ IDXC = I
895
+ IF (IDXC+NC-1-NM) 102,102,101
896
+ 101 NC = 0
897
+ 102 RETURN
898
+ END
899
+ SUBROUTINE CPPADD (N,IERROR,A,C,CBP,BP,BH)
900
+ C
901
+ C CPPADD COMPUTES THE EIGENVALUES OF THE PERIODIC TRIDIAGONAL
902
+ C MATRIX WITH COEFFICIENTS AN,BN,CN
903
+ C
904
+ C N IS THE ORDER OF THE BH AND BP POLYNOMIALS
905
+ C ON OUTPUT BP CONTAINS THE EIGENVALUES
906
+ C CBP IS THE SAME AS BP EXCEPT TYPE COMPLEX
907
+ C BH IS USED TO TEMPORARILY STORE THE ROOTS OF THE B HAT POLYNOMIAL
908
+ C WHICH ENTERS THROUGH BP
909
+ C
910
+ COMPLEX CF ,CX ,FSG ,HSG ,
911
+ 1 DD ,F ,FP ,FPP ,
912
+ 2 CDIS ,R1 ,R2 ,R3 ,
913
+ 3 CBP
914
+ DIMENSION A(*) ,C(*) ,BP(*) ,BH(*) ,
915
+ 1 CBP(*)
916
+ COMMON /CCBLK/ NPP ,K ,EPS ,CNV ,
917
+ 1 NM ,NCMPLX ,IK
918
+ EXTERNAL PSGF ,PPSPF ,PPSGF
919
+ SCNV = SQRT(CNV)
920
+ IZ = N
921
+ IZM = IZ-1
922
+ IZM2 = IZ-2
923
+ IF (BP(N)-BP(1)) 101,142,103
924
+ 101 DO 102 J=1,N
925
+ NT = N-J
926
+ BH(J) = BP(NT+1)
927
+ 102 CONTINUE
928
+ GO TO 105
929
+ 103 DO 104 J=1,N
930
+ BH(J) = BP(J)
931
+ 104 CONTINUE
932
+ 105 NCMPLX = 0
933
+ MODIZ = MOD(IZ,2)
934
+ IS = 1
935
+ IF (MODIZ) 106,107,106
936
+ 106 IF (A(1)) 110,142,107
937
+ 107 XL = BH(1)
938
+ DB = BH(3)-BH(1)
939
+ 108 XL = XL-DB
940
+ IF (PSGF(XL,IZ,C,A,BH)) 108,108,109
941
+ 109 SGN = -1.
942
+ CBP(1) = CMPLX(CBSRH(XL,BH(1),IZ,C,A,BH,PSGF,SGN),0.)
943
+ IS = 2
944
+ 110 IF = IZ-1
945
+ IF (MODIZ) 111,112,111
946
+ 111 IF (A(1)) 112,142,115
947
+ 112 XR = BH(IZ)
948
+ DB = BH(IZ)-BH(IZ-2)
949
+ 113 XR = XR+DB
950
+ IF (PSGF(XR,IZ,C,A,BH)) 113,114,114
951
+ 114 SGN = 1.
952
+ CBP(IZ) = CMPLX(CBSRH(BH(IZ),XR,IZ,C,A,BH,PSGF,SGN),0.)
953
+ IF = IZ-2
954
+ 115 DO 136 IG=IS,IF,2
955
+ XL = BH(IG)
956
+ XR = BH(IG+1)
957
+ SGN = -1.
958
+ XM = CBSRH(XL,XR,IZ,C,A,BH,PPSPF,SGN)
959
+ PSG = PSGF(XM,IZ,C,A,BH)
960
+ IF (ABS(PSG)-EPS) 118,118,116
961
+ 116 IF (PSG*PPSGF(XM,IZ,C,A,BH)) 117,118,119
962
+ C
963
+ C CASE OF A REAL ZERO
964
+ C
965
+ 117 SGN = 1.
966
+ CBP(IG) = CMPLX(CBSRH(BH(IG),XM,IZ,C,A,BH,PSGF,SGN),0.)
967
+ SGN = -1.
968
+ CBP(IG+1) = CMPLX(CBSRH(XM,BH(IG+1),IZ,C,A,BH,PSGF,SGN),0.)
969
+ GO TO 136
970
+ C
971
+ C CASE OF A MULTIPLE ZERO
972
+ C
973
+ 118 CBP(IG) = CMPLX(XM,0.)
974
+ CBP(IG+1) = CMPLX(XM,0.)
975
+ GO TO 136
976
+ C
977
+ C CASE OF A COMPLEX ZERO
978
+ C
979
+ 119 IT = 0
980
+ ICV = 0
981
+ CX = CMPLX(XM,0.)
982
+ 120 FSG = (1.,0.)
983
+ HSG = (1.,0.)
984
+ FP = (0.,0.)
985
+ FPP = (0.,0.)
986
+ DO 121 J=1,IZ
987
+ DD = 1./(CX-BH(J))
988
+ FSG = FSG*A(J)*DD
989
+ HSG = HSG*C(J)*DD
990
+ FP = FP+DD
991
+ FPP = FPP-DD*DD
992
+ 121 CONTINUE
993
+ IF (MODIZ) 123,122,123
994
+ 122 F = (1.,0.)-FSG-HSG
995
+ GO TO 124
996
+ 123 F = (1.,0.)+FSG+HSG
997
+ 124 I3 = 0
998
+ IF (CABS(FP)) 126,126,125
999
+ 125 I3 = 1
1000
+ R3 = -F/FP
1001
+ 126 I2 = 0
1002
+ IF (CABS(FPP)) 132,132,127
1003
+ 127 I2 = 1
1004
+ CDIS = CSQRT(FP**2-2.*F*FPP)
1005
+ R1 = CDIS-FP
1006
+ R2 = -FP-CDIS
1007
+ IF (CABS(R1)-CABS(R2)) 129,129,128
1008
+ 128 R1 = R1/FPP
1009
+ GO TO 130
1010
+ 129 R1 = R2/FPP
1011
+ 130 R2 = 2.*F/FPP/R1
1012
+ IF (CABS(R2) .LT. CABS(R1)) R1 = R2
1013
+ IF (I3) 133,133,131
1014
+ 131 IF (CABS(R3) .LT. CABS(R1)) R1 = R3
1015
+ GO TO 133
1016
+ 132 R1 = R3
1017
+ 133 CX = CX+R1
1018
+ IT = IT+1
1019
+ IF (IT .GT. 50) GO TO 142
1020
+ IF (CABS(R1) .GT. SCNV) GO TO 120
1021
+ IF (ICV) 134,134,135
1022
+ 134 ICV = 1
1023
+ GO TO 120
1024
+ 135 CBP(IG) = CX
1025
+ CBP(IG+1) = CONJG(CX)
1026
+ 136 CONTINUE
1027
+ IF (CABS(CBP(N))-CABS(CBP(1))) 137,142,139
1028
+ 137 NHALF = N/2
1029
+ DO 138 J=1,NHALF
1030
+ NT = N-J
1031
+ CX = CBP(J)
1032
+ CBP(J) = CBP(NT+1)
1033
+ CBP(NT+1) = CX
1034
+ 138 CONTINUE
1035
+ 139 NCMPLX = 1
1036
+ DO 140 J=2,IZ
1037
+ IF (AIMAG(CBP(J))) 143,140,143
1038
+ 140 CONTINUE
1039
+ NCMPLX = 0
1040
+ DO 141 J=2,IZ
1041
+ BP(J) = REAL(CBP(J))
1042
+ 141 CONTINUE
1043
+ GO TO 143
1044
+ 142 IERROR = 4
1045
+ 143 CONTINUE
1046
+ RETURN
1047
+ END
1048
+ SUBROUTINE PROC (ND,BD,NM1,BM1,NM2,BM2,NA,AA,X,Y,M,A,B,C,D,W,U)
1049
+ C
1050
+ C PROC APPLIES A SEQUENCE OF MATRIX OPERATIONS TO THE VECTOR X AND
1051
+ C STORES THE RESULT IN Y
1052
+ C BD,BM1,BM2 ARE ARRAYS CONTAINING ROOTS OF CERTIAN B POLYNOMIALS
1053
+ C ND,NM1,NM2 ARE THE LENGTHS OF THE ARRAYS BD,BM1,BM2 RESPECTIVELY
1054
+ C AA ARRAY CONTAINING SCALAR MULTIPLIERS OF THE VECTOR X
1055
+ C NA IS THE LENGTH OF THE ARRAY AA
1056
+ C X,Y THE MATRIX OPERATIONS ARE APPLIED TO X AND THE RESULT IS Y
1057
+ C A,B,C ARE ARRAYS WHICH CONTAIN THE TRIDIAGONAL MATRIX
1058
+ C M IS THE ORDER OF THE MATRIX
1059
+ C D,W,U ARE WORKING ARRAYS
1060
+ C IS DETERMINES WHETHER OR NOT A CHANGE IN SIGN IS MADE
1061
+ C
1062
+ DIMENSION A(*) ,B(*) ,C(*) ,X(*) ,
1063
+ 1 Y(*) ,D(*) ,W(*) ,BD(*) ,
1064
+ 2 BM1(*) ,BM2(*) ,AA(*) ,U(*)
1065
+ COMPLEX X ,Y ,A ,B ,
1066
+ 1 C ,D ,W ,U ,
1067
+ 2 DEN
1068
+ DO 101 J=1,M
1069
+ W(J) = X(J)
1070
+ Y(J) = W(J)
1071
+ 101 CONTINUE
1072
+ MM = M-1
1073
+ ID = ND
1074
+ IBR = 0
1075
+ M1 = NM1
1076
+ M2 = NM2
1077
+ IA = NA
1078
+ 102 IF (IA) 105,105,103
1079
+ 103 RT = AA(IA)
1080
+ IF (ND .EQ. 0) RT = -RT
1081
+ IA = IA-1
1082
+ C
1083
+ C SCALAR MULTIPLICATION
1084
+ C
1085
+ DO 104 J=1,M
1086
+ Y(J) = RT*W(J)
1087
+ 104 CONTINUE
1088
+ 105 IF (ID) 125,125,106
1089
+ 106 RT = BD(ID)
1090
+ ID = ID-1
1091
+ IF (ID .EQ. 0) IBR = 1
1092
+ C
1093
+ C BEGIN SOLUTION TO SYSTEM
1094
+ C
1095
+ D(M) = A(M)/(B(M)-RT)
1096
+ W(M) = Y(M)/(B(M)-RT)
1097
+ DO 107 J=2,MM
1098
+ K = M-J
1099
+ DEN = B(K+1)-RT-C(K+1)*D(K+2)
1100
+ D(K+1) = A(K+1)/DEN
1101
+ W(K+1) = (Y(K+1)-C(K+1)*W(K+2))/DEN
1102
+ 107 CONTINUE
1103
+ DEN = B(1)-RT-C(1)*D(2)
1104
+ W(1) = (1.,0.)
1105
+ IF (CABS(DEN)) 108,109,108
1106
+ 108 W(1) = (Y(1)-C(1)*W(2))/DEN
1107
+ 109 DO 110 J=2,M
1108
+ W(J) = W(J)-D(J)*W(J-1)
1109
+ 110 CONTINUE
1110
+ IF (NA) 113,113,102
1111
+ 111 DO 112 J=1,M
1112
+ Y(J) = W(J)
1113
+ 112 CONTINUE
1114
+ IBR = 1
1115
+ GO TO 102
1116
+ 113 IF (M1) 114,114,115
1117
+ 114 IF (M2) 111,111,120
1118
+ 115 IF (M2) 117,117,116
1119
+ 116 IF (ABS(BM1(M1))-ABS(BM2(M2))) 120,120,117
1120
+ 117 IF (IBR) 118,118,119
1121
+ 118 IF (ABS(BM1(M1)-BD(ID))-ABS(BM1(M1)-RT)) 111,119,119
1122
+ 119 RT = RT-BM1(M1)
1123
+ M1 = M1-1
1124
+ GO TO 123
1125
+ 120 IF (IBR) 121,121,122
1126
+ 121 IF (ABS(BM2(M2)-BD(ID))-ABS(BM2(M2)-RT)) 111,122,122
1127
+ 122 RT = RT-BM2(M2)
1128
+ M2 = M2-1
1129
+ 123 DO 124 J=1,M
1130
+ Y(J) = Y(J)+RT*W(J)
1131
+ 124 CONTINUE
1132
+ GO TO 102
1133
+ 125 RETURN
1134
+ END
1135
+ SUBROUTINE PROCP (ND,BD,NM1,BM1,NM2,BM2,NA,AA,X,Y,M,A,B,C,D,U,W)
1136
+ C
1137
+ C PROCP APPLIES A SEQUENCE OF MATRIX OPERATIONS TO THE VECTOR X AND
1138
+ C STORES THE RESULT IN Y PERIODIC BOUNDARY CONDITIONS
1139
+ C
1140
+ C BD,BM1,BM2 ARE ARRAYS CONTAINING ROOTS OF CERTIAN B POLYNOMIALS
1141
+ C ND,NM1,NM2 ARE THE LENGTHS OF THE ARRAYS BD,BM1,BM2 RESPECTIVELY
1142
+ C AA ARRAY CONTAINING SCALAR MULTIPLIERS OF THE VECTOR X
1143
+ C NA IS THE LENGTH OF THE ARRAY AA
1144
+ C X,Y THE MATRIX OPERATIONS ARE APPLIED TO X AND THE RESULT IS Y
1145
+ C A,B,C ARE ARRAYS WHICH CONTAIN THE TRIDIAGONAL MATRIX
1146
+ C M IS THE ORDER OF THE MATRIX
1147
+ C D,U,W ARE WORKING ARRAYS
1148
+ C IS DETERMINES WHETHER OR NOT A CHANGE IN SIGN IS MADE
1149
+ C
1150
+ DIMENSION A(*) ,B(*) ,C(*) ,X(*) ,
1151
+ 1 Y(*) ,D(*) ,U(*) ,BD(*) ,
1152
+ 2 BM1(*) ,BM2(*) ,AA(*) ,W(*)
1153
+ COMPLEX X ,Y ,A ,B ,
1154
+ 1 C ,D ,U ,W ,
1155
+ 2 DEN ,YM ,V ,BH ,AM
1156
+ DO 101 J=1,M
1157
+ Y(J) = X(J)
1158
+ W(J) = Y(J)
1159
+ 101 CONTINUE
1160
+ MM = M-1
1161
+ MM2 = M-2
1162
+ ID = ND
1163
+ IBR = 0
1164
+ M1 = NM1
1165
+ M2 = NM2
1166
+ IA = NA
1167
+ 102 IF (IA) 105,105,103
1168
+ 103 RT = AA(IA)
1169
+ IF (ND .EQ. 0) RT = -RT
1170
+ IA = IA-1
1171
+ DO 104 J=1,M
1172
+ Y(J) = RT*W(J)
1173
+ 104 CONTINUE
1174
+ 105 IF (ID) 128,128,106
1175
+ 106 RT = BD(ID)
1176
+ ID = ID-1
1177
+ IF (ID .EQ. 0) IBR = 1
1178
+ C
1179
+ C BEGIN SOLUTION TO SYSTEM
1180
+ C
1181
+ BH = B(M)-RT
1182
+ YM = Y(M)
1183
+ DEN = B(1)-RT
1184
+ D(1) = C(1)/DEN
1185
+ U(1) = A(1)/DEN
1186
+ W(1) = Y(1)/DEN
1187
+ V = C(M)
1188
+ IF (MM2-2) 109,107,107
1189
+ 107 DO 108 J=2,MM2
1190
+ DEN = B(J)-RT-A(J)*D(J-1)
1191
+ D(J) = C(J)/DEN
1192
+ U(J) = -A(J)*U(J-1)/DEN
1193
+ W(J) = (Y(J)-A(J)*W(J-1))/DEN
1194
+ BH = BH-V*U(J-1)
1195
+ YM = YM-V*W(J-1)
1196
+ V = -V*D(J-1)
1197
+ 108 CONTINUE
1198
+ 109 DEN = B(M-1)-RT-A(M-1)*D(M-2)
1199
+ D(M-1) = (C(M-1)-A(M-1)*U(M-2))/DEN
1200
+ W(M-1) = (Y(M-1)-A(M-1)*W(M-2))/DEN
1201
+ AM = A(M)-V*D(M-2)
1202
+ BH = BH-V*U(M-2)
1203
+ YM = YM-V*W(M-2)
1204
+ DEN = BH-AM*D(M-1)
1205
+ IF (CABS(DEN)) 110,111,110
1206
+ 110 W(M) = (YM-AM*W(M-1))/DEN
1207
+ GO TO 112
1208
+ 111 W(M) = (1.,0.)
1209
+ 112 W(M-1) = W(M-1)-D(M-1)*W(M)
1210
+ DO 113 J=2,MM
1211
+ K = M-J
1212
+ W(K) = W(K)-D(K)*W(K+1)-U(K)*W(M)
1213
+ 113 CONTINUE
1214
+ IF (NA) 116,116,102
1215
+ 114 DO 115 J=1,M
1216
+ Y(J) = W(J)
1217
+ 115 CONTINUE
1218
+ IBR = 1
1219
+ GO TO 102
1220
+ 116 IF (M1) 117,117,118
1221
+ 117 IF (M2) 114,114,123
1222
+ 118 IF (M2) 120,120,119
1223
+ 119 IF (ABS(BM1(M1))-ABS(BM2(M2))) 123,123,120
1224
+ 120 IF (IBR) 121,121,122
1225
+ 121 IF (ABS(BM1(M1)-BD(ID))-ABS(BM1(M1)-RT)) 114,122,122
1226
+ 122 RT = RT-BM1(M1)
1227
+ M1 = M1-1
1228
+ GO TO 126
1229
+ 123 IF (IBR) 124,124,125
1230
+ 124 IF (ABS(BM2(M2)-BD(ID))-ABS(BM2(M2)-RT)) 114,125,125
1231
+ 125 RT = RT-BM2(M2)
1232
+ M2 = M2-1
1233
+ 126 DO 127 J=1,M
1234
+ Y(J) = Y(J)+RT*W(J)
1235
+ 127 CONTINUE
1236
+ GO TO 102
1237
+ 128 RETURN
1238
+ END
1239
+ SUBROUTINE CTEVLS (N,D,E2,IERR)
1240
+ C
1241
+ INTEGER I ,J ,L ,M ,
1242
+ 1 N ,II ,L1 ,MML ,
1243
+ 2 IERR
1244
+ REAL D(N) ,E2(N)
1245
+ REAL B ,C ,F ,G ,
1246
+ 1 H ,P ,R ,S ,
1247
+ 2 MACHEP
1248
+ C
1249
+ C REAL SQRT,ABS,SIGN
1250
+ C
1251
+ COMMON /CCBLK/ NPP ,K ,MACHEP ,CNV ,
1252
+ 1 NM ,NCMPLX ,IK
1253
+ C
1254
+ C THIS SUBROUTINE IS A MODIFICATION OF THE EISPACK SUBROUTINE TQLRAT
1255
+ C ALGORITHM 464, COMM. ACM 16, 689(1973) BY REINSCH.
1256
+ C
1257
+ C THIS SUBROUTINE FINDS THE EIGENVALUES OF A SYMMETRIC
1258
+ C TRIDIAGONAL MATRIX BY THE RATIONAL QL METHOD.
1259
+ C
1260
+ C ON INPUT-
1261
+ C
1262
+ C N IS THE ORDER OF THE MATRIX,
1263
+ C
1264
+ C D CONTAINS THE DIAGONAL ELEMENTS OF THE INPUT MATRIX,
1265
+ C
1266
+ C E2 CONTAINS THE SUBDIAGONAL ELEMENTS OF THE
1267
+ C INPUT MATRIX IN ITS LAST N-1 POSITIONS. E2(1) IS ARBITRARY.
1268
+ C
1269
+ C ON OUTPUT-
1270
+ C
1271
+ C D CONTAINS THE EIGENVALUES IN ASCENDING ORDER. IF AN
1272
+ C ERROR EXIT IS MADE, THE EIGENVALUES ARE CORRECT AND
1273
+ C ORDERED FOR INDICES 1,2,...IERR-1, BUT MAY NOT BE
1274
+ C THE SMALLEST EIGENVALUES,
1275
+ C
1276
+ C E2 HAS BEEN DESTROYED,
1277
+ C
1278
+ C IERR IS SET TO
1279
+ C ZERO FOR NORMAL RETURN,
1280
+ C J IF THE J-TH EIGENVALUE HAS NOT BEEN
1281
+ C DETERMINED AFTER 30 ITERATIONS.
1282
+ C
1283
+ C QUESTIONS AND COMMENTS SHOULD BE DIRECTED TO B. S. GARBOW,
1284
+ C APPLIED MATHEMATICS DIVISION, ARGONNE NATIONAL LABORATORY
1285
+ C
1286
+ C
1287
+ C ********** MACHEP IS A MACHINE DEPENDENT PARAMETER SPECIFYING
1288
+ C THE RELATIVE PRECISION OF FLOATING POINT ARITHMETIC.
1289
+ C
1290
+ C **********
1291
+ C
1292
+ IERR = 0
1293
+ IF (N .EQ. 1) GO TO 115
1294
+ C
1295
+ DO 101 I=2,N
1296
+ E2(I-1) = E2(I)*E2(I)
1297
+ 101 CONTINUE
1298
+ C
1299
+ F = 0.0
1300
+ B = 0.0
1301
+ E2(N) = 0.0
1302
+ C
1303
+ DO 112 L=1,N
1304
+ J = 0
1305
+ H = MACHEP*(ABS(D(L))+SQRT(E2(L)))
1306
+ IF (B .GT. H) GO TO 102
1307
+ B = H
1308
+ C = B*B
1309
+ C
1310
+ C ********** LOOK FOR SMALL SQUARED SUB-DIAGONAL ELEMENT **********
1311
+ C
1312
+ 102 DO 103 M=L,N
1313
+ IF (E2(M) .LE. C) GO TO 104
1314
+ C
1315
+ C ********** E2(N) IS ALWAYS ZERO, SO THERE IS NO EXIT
1316
+ C THROUGH THE BOTTOM OF THE LOOP **********
1317
+ C
1318
+ 103 CONTINUE
1319
+ C
1320
+ 104 IF (M .EQ. L) GO TO 108
1321
+ 105 IF (J .EQ. 30) GO TO 114
1322
+ J = J+1
1323
+ C
1324
+ C ********** FORM SHIFT **********
1325
+ C
1326
+ L1 = L+1
1327
+ S = SQRT(E2(L))
1328
+ G = D(L)
1329
+ P = (D(L1)-G)/(2.0*S)
1330
+ R = SQRT(P*P+1.0)
1331
+ D(L) = S/(P+SIGN(R,P))
1332
+ H = G-D(L)
1333
+ C
1334
+ DO 106 I=L1,N
1335
+ D(I) = D(I)-H
1336
+ 106 CONTINUE
1337
+ C
1338
+ F = F+H
1339
+ C
1340
+ C ********** RATIONAL QL TRANSFORMATION **********
1341
+ C
1342
+ G = D(M)
1343
+ IF (G .EQ. 0.0) G = B
1344
+ H = G
1345
+ S = 0.0
1346
+ MML = M-L
1347
+ C
1348
+ C ********** FOR I=M-1 STEP -1 UNTIL L DO -- **********
1349
+ C
1350
+ DO 107 II=1,MML
1351
+ I = M-II
1352
+ P = G*H
1353
+ R = P+E2(I)
1354
+ E2(I+1) = S*R
1355
+ S = E2(I)/R
1356
+ D(I+1) = H+S*(H+D(I))
1357
+ G = D(I)-E2(I)/G
1358
+ IF (G .EQ. 0.0) G = B
1359
+ H = G*P/R
1360
+ 107 CONTINUE
1361
+ C
1362
+ E2(L) = S*G
1363
+ D(L) = H
1364
+ C
1365
+ C ********** GUARD AGAINST UNDERFLOWED H **********
1366
+ C
1367
+ IF (H .EQ. 0.0) GO TO 108
1368
+ IF (ABS(E2(L)) .LE. ABS(C/H)) GO TO 108
1369
+ E2(L) = H*E2(L)
1370
+ IF (E2(L) .NE. 0.0) GO TO 105
1371
+ 108 P = D(L)+F
1372
+ C
1373
+ C ********** ORDER EIGENVALUES **********
1374
+ C
1375
+ IF (L .EQ. 1) GO TO 110
1376
+ C
1377
+ C ********** FOR I=L STEP -1 UNTIL 2 DO -- **********
1378
+ C
1379
+ DO 109 II=2,L
1380
+ I = L+2-II
1381
+ IF (P .GE. D(I-1)) GO TO 111
1382
+ D(I) = D(I-1)
1383
+ 109 CONTINUE
1384
+ C
1385
+ 110 I = 1
1386
+ 111 D(I) = P
1387
+ 112 CONTINUE
1388
+ C
1389
+ IF (ABS(D(N)) .GE. ABS(D(1))) GO TO 115
1390
+ NHALF = N/2
1391
+ DO 113 I=1,NHALF
1392
+ NTOP = N-I
1393
+ DHOLD = D(I)
1394
+ D(I) = D(NTOP+1)
1395
+ D(NTOP+1) = DHOLD
1396
+ 113 CONTINUE
1397
+ GO TO 115
1398
+ C
1399
+ C ********** SET ERROR -- NO CONVERGENCE TO AN
1400
+ C EIGENVALUE AFTER 30 ITERATIONS **********
1401
+ C
1402
+ 114 IERR = L
1403
+ 115 RETURN
1404
+ C
1405
+ C REVISION HISTORY---
1406
+ C
1407
+ C SEPTEMBER 1973 VERSION 1
1408
+ C APRIL 1976 VERSION 2
1409
+ C JANUARY 1978 VERSION 3
1410
+ C DECEMBER 1979 VERSION 3.1
1411
+ C FEBRUARY 1985 DOCUMENTATION UPGRADE
1412
+ C NOVEMBER 1988 VERSION 3.2, FORTRAN 77 CHANGES
1413
+ C-----------------------------------------------------------------------
1414
+ END