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