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.
- PyFishPack/__init__.py +86 -0
- PyFishPack/__pycache__/__init__.cpython-313.pyc +0 -0
- PyFishPack/__pycache__/apps.cpython-313.pyc +0 -0
- PyFishPack/_dummy.c +23 -0
- PyFishPack/_dummy.cp313-win_amd64.pyd +0 -0
- PyFishPack/apps.py +3640 -0
- PyFishPack/fishpack.cp313-win_amd64.dll.a +0 -0
- PyFishPack/fishpack.cp313-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 +81 -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/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,1335 @@
|
|
|
1
|
+
C
|
|
2
|
+
C file genbun.f
|
|
3
|
+
C
|
|
4
|
+
SUBROUTINE GENBUN (NPEROD,N,MPEROD,M,A,B,C,IDIMY,Y,IERROR,W)
|
|
5
|
+
C
|
|
6
|
+
C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
7
|
+
C * *
|
|
8
|
+
C * copyright (c) 1999 by UCAR *
|
|
9
|
+
C * *
|
|
10
|
+
C * UNIVERSITY CORPORATION for ATMOSPHERIC RESEARCH *
|
|
11
|
+
C * *
|
|
12
|
+
C * all rights reserved *
|
|
13
|
+
C * *
|
|
14
|
+
C * FISHPACK version 4.1 *
|
|
15
|
+
C * *
|
|
16
|
+
C * A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE SOLUTION OF *
|
|
17
|
+
C * *
|
|
18
|
+
C * SEPARABLE ELLIPTIC PARTIAL DIFFERENTIAL EQUATIONS *
|
|
19
|
+
C * *
|
|
20
|
+
C * BY *
|
|
21
|
+
C * *
|
|
22
|
+
C * JOHN ADAMS, PAUL SWARZTRAUBER AND ROLAND SWEET *
|
|
23
|
+
C * *
|
|
24
|
+
C * OF *
|
|
25
|
+
C * *
|
|
26
|
+
C * THE NATIONAL CENTER FOR ATMOSPHERIC RESEARCH *
|
|
27
|
+
C * *
|
|
28
|
+
C * BOULDER, COLORADO (80307) U.S.A. *
|
|
29
|
+
C * *
|
|
30
|
+
C * WHICH IS SPONSORED BY *
|
|
31
|
+
C * *
|
|
32
|
+
C * THE NATIONAL SCIENCE FOUNDATION *
|
|
33
|
+
C * *
|
|
34
|
+
C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
35
|
+
C
|
|
36
|
+
C
|
|
37
|
+
C
|
|
38
|
+
C DIMENSION OF A(M),B(M),C(M),Y(IDIMY,N),
|
|
39
|
+
C W(SEE PARAMETER LIST)
|
|
40
|
+
C ARGUMENTS
|
|
41
|
+
C
|
|
42
|
+
C LATEST REVISION NOVEMBER 1988
|
|
43
|
+
C
|
|
44
|
+
C PURPOSE THE NAME OF THIS PACKAGE IS A MNEMONIC FOR THE
|
|
45
|
+
C GENERALIZED BUNEMAN ALGORITHM.
|
|
46
|
+
C
|
|
47
|
+
C IT SOLVES THE REAL LINEAR SYSTEM OF EQUATIONS
|
|
48
|
+
C
|
|
49
|
+
C A(I)*X(I-1,J) + B(I)*X(I,J) + C(I)*X(I+1,J)
|
|
50
|
+
C + X(I,J-1) - 2.*X(I,J) + X(I,J+1) = Y(I,J)
|
|
51
|
+
C
|
|
52
|
+
C FOR I = 1,2,...,M AND J = 1,2,...,N.
|
|
53
|
+
C
|
|
54
|
+
C INDICES I+1 AND I-1 ARE EVALUATED MODULO M,
|
|
55
|
+
C I.E., X(0,J) = X(M,J) AND X(M+1,J) = X(1,J),
|
|
56
|
+
C AND X(I,0) MAY EQUAL 0, X(I,2), OR X(I,N),
|
|
57
|
+
C AND X(I,N+1) MAY EQUAL 0, X(I,N-1), OR X(I,1)
|
|
58
|
+
C DEPENDING ON AN INPUT PARAMETER.
|
|
59
|
+
C
|
|
60
|
+
C USAGE CALL GENBUN (NPEROD,N,MPEROD,M,A,B,C,IDIMY,Y,
|
|
61
|
+
C IERROR,W)
|
|
62
|
+
C
|
|
63
|
+
C ARGUMENTS
|
|
64
|
+
C
|
|
65
|
+
C ON INPUT NPEROD
|
|
66
|
+
C
|
|
67
|
+
C INDICATES THE VALUES THAT X(I,0) AND
|
|
68
|
+
C X(I,N+1) ARE ASSUMED TO HAVE.
|
|
69
|
+
C
|
|
70
|
+
C = 0 IF X(I,0) = X(I,N) AND X(I,N+1) =
|
|
71
|
+
C X(I,1).
|
|
72
|
+
C = 1 IF X(I,0) = X(I,N+1) = 0 .
|
|
73
|
+
C = 2 IF X(I,0) = 0 AND X(I,N+1) = X(I,N-1).
|
|
74
|
+
C = 3 IF X(I,0) = X(I,2) AND X(I,N+1) =
|
|
75
|
+
C X(I,N-1).
|
|
76
|
+
C = 4 IF X(I,0) = X(I,2) AND X(I,N+1) = 0.
|
|
77
|
+
C
|
|
78
|
+
C N
|
|
79
|
+
C THE NUMBER OF UNKNOWNS IN THE J-DIRECTION.
|
|
80
|
+
C N MUST BE GREATER THAN 2.
|
|
81
|
+
C
|
|
82
|
+
C MPEROD
|
|
83
|
+
C = 0 IF A(1) AND C(M) ARE NOT ZERO
|
|
84
|
+
C = 1 IF A(1) = C(M) = 0
|
|
85
|
+
C
|
|
86
|
+
C M
|
|
87
|
+
C THE NUMBER OF UNKNOWNS IN THE I-DIRECTION.
|
|
88
|
+
C N MUST BE GREATER THAN 2.
|
|
89
|
+
C
|
|
90
|
+
C A,B,C
|
|
91
|
+
C ONE-DIMENSIONAL ARRAYS OF LENGTH M THAT
|
|
92
|
+
C SPECIFY THE COEFFICIENTS IN THE LINEAR
|
|
93
|
+
C EQUATIONS GIVEN ABOVE. IF MPEROD = 0
|
|
94
|
+
C THE ARRAY ELEMENTS MUST NOT DEPEND UPON
|
|
95
|
+
C THE INDEX I, BUT MUST BE CONSTANT.
|
|
96
|
+
C SPECIFICALLY, THE SUBROUTINE CHECKS THE
|
|
97
|
+
C FOLLOWING CONDITION .
|
|
98
|
+
C
|
|
99
|
+
C A(I) = C(1)
|
|
100
|
+
C C(I) = C(1)
|
|
101
|
+
C B(I) = B(1)
|
|
102
|
+
C
|
|
103
|
+
C FOR I=1,2,...,M.
|
|
104
|
+
C
|
|
105
|
+
C IDIMY
|
|
106
|
+
C THE ROW (OR FIRST) DIMENSION OF THE
|
|
107
|
+
C TWO-DIMENSIONAL ARRAY Y AS IT APPEARS
|
|
108
|
+
C IN THE PROGRAM CALLING GENBUN.
|
|
109
|
+
C THIS PARAMETER IS USED TO SPECIFY THE
|
|
110
|
+
C VARIABLE DIMENSION OF Y.
|
|
111
|
+
C IDIMY MUST BE AT LEAST M.
|
|
112
|
+
C
|
|
113
|
+
C Y
|
|
114
|
+
C A TWO-DIMENSIONAL COMPLEX ARRAY THAT
|
|
115
|
+
C SPECIFIES THE VALUES OF THE RIGHT SIDE
|
|
116
|
+
C OF THE LINEAR SYSTEM OF EQUATIONS GIVEN
|
|
117
|
+
C ABOVE.
|
|
118
|
+
C Y MUST BE DIMENSIONED AT LEAST M*N.
|
|
119
|
+
C
|
|
120
|
+
C W
|
|
121
|
+
C A ONE-DIMENSIONAL ARRAY THAT MUST
|
|
122
|
+
C BE PROVIDED BY THE USER FOR WORK
|
|
123
|
+
C SPACE. W MAY REQUIRE UP TO 4*N +
|
|
124
|
+
C (10 + INT(LOG2(N)))*M LOCATIONS.
|
|
125
|
+
C THE ACTUAL NUMBER OF LOCATIONS USED IS
|
|
126
|
+
C COMPUTED BY GENBUN AND IS RETURNED IN
|
|
127
|
+
C LOCATION W(1).
|
|
128
|
+
C
|
|
129
|
+
C
|
|
130
|
+
C ON OUTPUT Y
|
|
131
|
+
C
|
|
132
|
+
C CONTAINS THE SOLUTION X.
|
|
133
|
+
C
|
|
134
|
+
C IERROR
|
|
135
|
+
C AN ERROR FLAG WHICH INDICATES INVALID
|
|
136
|
+
C INPUT PARAMETERS EXCEPT FOR NUMBER
|
|
137
|
+
C ZERO, A SOLUTION IS NOT ATTEMPTED.
|
|
138
|
+
C
|
|
139
|
+
C = 0 NO ERROR.
|
|
140
|
+
C = 1 M .LE. 2 .
|
|
141
|
+
C = 2 N .LE. 2
|
|
142
|
+
C = 3 IDIMY .LT. M
|
|
143
|
+
C = 4 NPEROD .LT. 0 OR NPEROD .GT. 4
|
|
144
|
+
C = 5 MPEROD .LT. 0 OR MPEROD .GT. 1
|
|
145
|
+
C = 6 A(I) .NE. C(1) OR C(I) .NE. C(1) OR
|
|
146
|
+
C B(I) .NE. B(1) FOR
|
|
147
|
+
C SOME I=1,2,...,M.
|
|
148
|
+
C = 7 A(1) .NE. 0 OR C(M) .NE. 0 AND
|
|
149
|
+
C MPEROD = 1
|
|
150
|
+
C
|
|
151
|
+
C W
|
|
152
|
+
C W(1) CONTAINS THE REQUIRED LENGTH OF W.
|
|
153
|
+
C
|
|
154
|
+
C SPECIAL CONDITONS NONE
|
|
155
|
+
C
|
|
156
|
+
C I/O NONE
|
|
157
|
+
C
|
|
158
|
+
C PRECISION SINGLE
|
|
159
|
+
C
|
|
160
|
+
C REQUIRED LIBRARY COMF AND GNBNAUX FROM FISHPACK
|
|
161
|
+
C FILES
|
|
162
|
+
C
|
|
163
|
+
C LANGUAGE FORTRAN
|
|
164
|
+
C
|
|
165
|
+
C HISTORY WRITTEN IN 1979 BY ROLAND SWEET OF NCAR'S
|
|
166
|
+
C SCIENTIFIC COMPUTING DIVISION. MADE AVAILABLE
|
|
167
|
+
C ON NCAR'S PUBLIC LIBRARIES IN JANUARY, 1980.
|
|
168
|
+
C
|
|
169
|
+
C ALGORITHM THE LINEAR SYSTEM IS SOLVED BY A CYCLIC
|
|
170
|
+
C REDUCTION ALGORITHM DESCRIBED IN THE
|
|
171
|
+
C REFERENCE.
|
|
172
|
+
C
|
|
173
|
+
C PORTABILITY FORTRAN 77 --
|
|
174
|
+
C THE MACHINE DEPENDENT CONSTANT PI IS
|
|
175
|
+
C DEFINED IN FUNCTION PIMACH.
|
|
176
|
+
C
|
|
177
|
+
C REFERENCES SWEET, R., "A CYCLIC REDUCTION ALGORITHM FOR
|
|
178
|
+
C SOLVING BLOCK TRIDIAGONAL SYSTEMS OF ARBITRARY
|
|
179
|
+
C DIMENSIONS," SIAM J. ON NUMER. ANAL., 14 (1977)
|
|
180
|
+
C PP. 706-720.
|
|
181
|
+
C
|
|
182
|
+
C ACCURACY THIS TEST WAS PERFORMED ON A CDC 7600:
|
|
183
|
+
C
|
|
184
|
+
C A UNIFORM RANDOM NUMBER GENERATOR WAS USED
|
|
185
|
+
C TO CREATE A SOLUTION ARRAY X FOR THE SYSTEM
|
|
186
|
+
C GIVEN IN THE 'PURPOSE' DESCRIPTION ABOVE
|
|
187
|
+
C WITH
|
|
188
|
+
C A(I) = C(I) = -0.5*B(I) = 1, I=1,2,...,M
|
|
189
|
+
C
|
|
190
|
+
C AND, WHEN MPEROD = 1
|
|
191
|
+
C
|
|
192
|
+
C A(1) = C(M) = 0
|
|
193
|
+
C A(M) = C(1) = 2.
|
|
194
|
+
C
|
|
195
|
+
C THE SOLUTION X WAS SUBSTITUTED INTO THE
|
|
196
|
+
C GIVEN SYSTEM AND, USING DOUBLE PRECISION
|
|
197
|
+
C A RIGHT SIDE Y WAS COMPUTED.
|
|
198
|
+
C USING THIS ARRAY Y, SUBROUTINE GENBUN
|
|
199
|
+
C WAS CALLED TO PRODUCE APPROXIMATE
|
|
200
|
+
C SOLUTION Z. THEN RELATIVE ERROR
|
|
201
|
+
C E = MAX(ABS(Z(I,J)-X(I,J)))/
|
|
202
|
+
C MAX(ABS(X(I,J)))
|
|
203
|
+
C WAS COMPUTED, WHERE THE TWO MAXIMA ARE TAKEN
|
|
204
|
+
C OVER I=1,2,...,M AND J=1,...,N.
|
|
205
|
+
C
|
|
206
|
+
C THE VALUE OF E IS GIVEN IN THE TABLE
|
|
207
|
+
C BELOW FOR SOME TYPICAL VALUES OF M AND N.
|
|
208
|
+
C
|
|
209
|
+
C M (=N) MPEROD NPEROD T(MSECS) E
|
|
210
|
+
C ------ ------ ------ -------- ------
|
|
211
|
+
C
|
|
212
|
+
C 31 0 0 36 6.E-14
|
|
213
|
+
C 31 1 1 21 4.E-13
|
|
214
|
+
C 31 1 3 41 3.E-13
|
|
215
|
+
C 32 0 0 29 9.E-14
|
|
216
|
+
C 32 1 1 32 3.E-13
|
|
217
|
+
C 32 1 3 48 1.E-13
|
|
218
|
+
C 33 0 0 36 9.E-14
|
|
219
|
+
C 33 1 1 30 4.E-13
|
|
220
|
+
C 33 1 3 34 1.E-13
|
|
221
|
+
C 63 0 0 150 1.E-13
|
|
222
|
+
C 63 1 1 91 1.E-12
|
|
223
|
+
C 63 1 3 173 2.E-13
|
|
224
|
+
C 64 0 0 122 1.E-13
|
|
225
|
+
C 64 1 1 128 1.E-12
|
|
226
|
+
C 64 1 3 199 6.E-13
|
|
227
|
+
C 65 0 0 143 2.E-13
|
|
228
|
+
C 65 1 1 120 1.E-12
|
|
229
|
+
C 65 1 3 138 4.E-13
|
|
230
|
+
C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
231
|
+
DIMENSION Y(IDIMY,1)
|
|
232
|
+
DIMENSION W(*) ,B(*) ,A(*) ,C(*)
|
|
233
|
+
C
|
|
234
|
+
IERROR = 0
|
|
235
|
+
IF (M .LE. 2) IERROR = 1
|
|
236
|
+
IF (N .LE. 2) IERROR = 2
|
|
237
|
+
IF (IDIMY .LT. M) IERROR = 3
|
|
238
|
+
IF (NPEROD.LT.0 .OR. NPEROD.GT.4) IERROR = 4
|
|
239
|
+
IF (MPEROD.LT.0 .OR. MPEROD.GT.1) IERROR = 5
|
|
240
|
+
IF (MPEROD .EQ. 1) GO TO 102
|
|
241
|
+
DO 101 I=2,M
|
|
242
|
+
IF (A(I) .NE. C(1)) GO TO 103
|
|
243
|
+
IF (C(I) .NE. C(1)) GO TO 103
|
|
244
|
+
IF (B(I) .NE. B(1)) GO TO 103
|
|
245
|
+
101 CONTINUE
|
|
246
|
+
GO TO 104
|
|
247
|
+
102 IF (A(1).NE.0. .OR. C(M).NE.0.) IERROR = 7
|
|
248
|
+
GO TO 104
|
|
249
|
+
103 IERROR = 6
|
|
250
|
+
104 IF (IERROR .NE. 0) RETURN
|
|
251
|
+
MP1 = M+1
|
|
252
|
+
IWBA = MP1
|
|
253
|
+
IWBB = IWBA+M
|
|
254
|
+
IWBC = IWBB+M
|
|
255
|
+
IWB2 = IWBC+M
|
|
256
|
+
IWB3 = IWB2+M
|
|
257
|
+
IWW1 = IWB3+M
|
|
258
|
+
IWW2 = IWW1+M
|
|
259
|
+
IWW3 = IWW2+M
|
|
260
|
+
IWD = IWW3+M
|
|
261
|
+
IWTCOS = IWD+M
|
|
262
|
+
IWP = IWTCOS+4*N
|
|
263
|
+
DO 106 I=1,M
|
|
264
|
+
K = IWBA+I-1
|
|
265
|
+
W(K) = -A(I)
|
|
266
|
+
K = IWBC+I-1
|
|
267
|
+
W(K) = -C(I)
|
|
268
|
+
K = IWBB+I-1
|
|
269
|
+
W(K) = 2.-B(I)
|
|
270
|
+
DO 105 J=1,N
|
|
271
|
+
Y(I,J) = -Y(I,J)
|
|
272
|
+
105 CONTINUE
|
|
273
|
+
106 CONTINUE
|
|
274
|
+
MP = MPEROD+1
|
|
275
|
+
NP = NPEROD+1
|
|
276
|
+
GO TO (114,107),MP
|
|
277
|
+
107 GO TO (108,109,110,111,123),NP
|
|
278
|
+
108 CALL POISP2 (M,N,W(IWBA),W(IWBB),W(IWBC),Y,IDIMY,W,W(IWB2),
|
|
279
|
+
1 W(IWB3),W(IWW1),W(IWW2),W(IWW3),W(IWD),W(IWTCOS),
|
|
280
|
+
2 W(IWP))
|
|
281
|
+
GO TO 112
|
|
282
|
+
109 CALL POISD2 (M,N,1,W(IWBA),W(IWBB),W(IWBC),Y,IDIMY,W,W(IWW1),
|
|
283
|
+
1 W(IWD),W(IWTCOS),W(IWP))
|
|
284
|
+
GO TO 112
|
|
285
|
+
110 CALL POISN2 (M,N,1,2,W(IWBA),W(IWBB),W(IWBC),Y,IDIMY,W,W(IWB2),
|
|
286
|
+
1 W(IWB3),W(IWW1),W(IWW2),W(IWW3),W(IWD),W(IWTCOS),
|
|
287
|
+
2 W(IWP))
|
|
288
|
+
GO TO 112
|
|
289
|
+
111 CALL POISN2 (M,N,1,1,W(IWBA),W(IWBB),W(IWBC),Y,IDIMY,W,W(IWB2),
|
|
290
|
+
1 W(IWB3),W(IWW1),W(IWW2),W(IWW3),W(IWD),W(IWTCOS),
|
|
291
|
+
2 W(IWP))
|
|
292
|
+
112 IPSTOR = W(IWW1)
|
|
293
|
+
IREV = 2
|
|
294
|
+
IF (NPEROD .EQ. 4) GO TO 124
|
|
295
|
+
113 GO TO (127,133),MP
|
|
296
|
+
114 CONTINUE
|
|
297
|
+
C
|
|
298
|
+
C REORDER UNKNOWNS WHEN MP =0
|
|
299
|
+
C
|
|
300
|
+
MH = (M+1)/2
|
|
301
|
+
MHM1 = MH-1
|
|
302
|
+
MODD = 1
|
|
303
|
+
IF (MH*2 .EQ. M) MODD = 2
|
|
304
|
+
DO 119 J=1,N
|
|
305
|
+
DO 115 I=1,MHM1
|
|
306
|
+
MHPI = MH+I
|
|
307
|
+
MHMI = MH-I
|
|
308
|
+
W(I) = Y(MHMI,J)-Y(MHPI,J)
|
|
309
|
+
W(MHPI) = Y(MHMI,J)+Y(MHPI,J)
|
|
310
|
+
115 CONTINUE
|
|
311
|
+
W(MH) = 2.*Y(MH,J)
|
|
312
|
+
GO TO (117,116),MODD
|
|
313
|
+
116 W(M) = 2.*Y(M,J)
|
|
314
|
+
117 CONTINUE
|
|
315
|
+
DO 118 I=1,M
|
|
316
|
+
Y(I,J) = W(I)
|
|
317
|
+
118 CONTINUE
|
|
318
|
+
119 CONTINUE
|
|
319
|
+
K = IWBC+MHM1-1
|
|
320
|
+
I = IWBA+MHM1
|
|
321
|
+
W(K) = 0.
|
|
322
|
+
W(I) = 0.
|
|
323
|
+
W(K+1) = 2.*W(K+1)
|
|
324
|
+
GO TO (120,121),MODD
|
|
325
|
+
120 CONTINUE
|
|
326
|
+
K = IWBB+MHM1-1
|
|
327
|
+
W(K) = W(K)-W(I-1)
|
|
328
|
+
W(IWBC-1) = W(IWBC-1)+W(IWBB-1)
|
|
329
|
+
GO TO 122
|
|
330
|
+
121 W(IWBB-1) = W(K+1)
|
|
331
|
+
122 CONTINUE
|
|
332
|
+
GO TO 107
|
|
333
|
+
C
|
|
334
|
+
C REVERSE COLUMNS WHEN NPEROD = 4.
|
|
335
|
+
C
|
|
336
|
+
123 IREV = 1
|
|
337
|
+
NBY2 = N/2
|
|
338
|
+
124 DO 126 J=1,NBY2
|
|
339
|
+
MSKIP = N+1-J
|
|
340
|
+
DO 125 I=1,M
|
|
341
|
+
A1 = Y(I,J)
|
|
342
|
+
Y(I,J) = Y(I,MSKIP)
|
|
343
|
+
Y(I,MSKIP) = A1
|
|
344
|
+
125 CONTINUE
|
|
345
|
+
126 CONTINUE
|
|
346
|
+
GO TO (110,113),IREV
|
|
347
|
+
127 CONTINUE
|
|
348
|
+
DO 132 J=1,N
|
|
349
|
+
DO 128 I=1,MHM1
|
|
350
|
+
MHMI = MH-I
|
|
351
|
+
MHPI = MH+I
|
|
352
|
+
W(MHMI) = .5*(Y(MHPI,J)+Y(I,J))
|
|
353
|
+
W(MHPI) = .5*(Y(MHPI,J)-Y(I,J))
|
|
354
|
+
128 CONTINUE
|
|
355
|
+
W(MH) = .5*Y(MH,J)
|
|
356
|
+
GO TO (130,129),MODD
|
|
357
|
+
129 W(M) = .5*Y(M,J)
|
|
358
|
+
130 CONTINUE
|
|
359
|
+
DO 131 I=1,M
|
|
360
|
+
Y(I,J) = W(I)
|
|
361
|
+
131 CONTINUE
|
|
362
|
+
132 CONTINUE
|
|
363
|
+
133 CONTINUE
|
|
364
|
+
C
|
|
365
|
+
C RETURN STORAGE REQUIREMENTS FOR W ARRAY.
|
|
366
|
+
C
|
|
367
|
+
W(1) = IPSTOR+IWP-1
|
|
368
|
+
RETURN
|
|
369
|
+
END
|
|
370
|
+
SUBROUTINE POISD2 (MR,NR,ISTAG,BA,BB,BC,Q,IDIMQ,B,W,D,TCOS,P)
|
|
371
|
+
C
|
|
372
|
+
C SUBROUTINE TO SOLVE POISSON'S EQUATION FOR DIRICHLET BOUNDARY
|
|
373
|
+
C CONDITIONS.
|
|
374
|
+
C
|
|
375
|
+
C ISTAG = 1 IF THE LAST DIAGONAL BLOCK IS THE MATRIX A.
|
|
376
|
+
C ISTAG = 2 IF THE LAST DIAGONAL BLOCK IS THE MATRIX A+I.
|
|
377
|
+
C
|
|
378
|
+
DIMENSION Q(IDIMQ,1) ,BA(*) ,BB(*) ,BC(*) ,
|
|
379
|
+
1 TCOS(*) ,B(*) ,D(*) ,W(*) ,
|
|
380
|
+
2 P(*)
|
|
381
|
+
M = MR
|
|
382
|
+
N = NR
|
|
383
|
+
JSH = 0
|
|
384
|
+
FI = 1./FLOAT(ISTAG)
|
|
385
|
+
IP = -M
|
|
386
|
+
IPSTOR = 0
|
|
387
|
+
GO TO (101,102),ISTAG
|
|
388
|
+
101 KR = 0
|
|
389
|
+
IRREG = 1
|
|
390
|
+
IF (N .GT. 1) GO TO 106
|
|
391
|
+
TCOS(1) = 0.
|
|
392
|
+
GO TO 103
|
|
393
|
+
102 KR = 1
|
|
394
|
+
JSTSAV = 1
|
|
395
|
+
IRREG = 2
|
|
396
|
+
IF (N .GT. 1) GO TO 106
|
|
397
|
+
TCOS(1) = -1.
|
|
398
|
+
103 DO 104 I=1,M
|
|
399
|
+
B(I) = Q(I,1)
|
|
400
|
+
104 CONTINUE
|
|
401
|
+
CALL TRIX (1,0,M,BA,BB,BC,B,TCOS,D,W)
|
|
402
|
+
DO 105 I=1,M
|
|
403
|
+
Q(I,1) = B(I)
|
|
404
|
+
105 CONTINUE
|
|
405
|
+
GO TO 183
|
|
406
|
+
106 LR = 0
|
|
407
|
+
DO 107 I=1,M
|
|
408
|
+
P(I) = 0.
|
|
409
|
+
107 CONTINUE
|
|
410
|
+
NUN = N
|
|
411
|
+
JST = 1
|
|
412
|
+
JSP = N
|
|
413
|
+
C
|
|
414
|
+
C IRREG = 1 WHEN NO IRREGULARITIES HAVE OCCURRED, OTHERWISE IT IS 2.
|
|
415
|
+
C
|
|
416
|
+
108 L = 2*JST
|
|
417
|
+
NODD = 2-2*((NUN+1)/2)+NUN
|
|
418
|
+
C
|
|
419
|
+
C NODD = 1 WHEN NUN IS ODD, OTHERWISE IT IS 2.
|
|
420
|
+
C
|
|
421
|
+
GO TO (110,109),NODD
|
|
422
|
+
109 JSP = JSP-L
|
|
423
|
+
GO TO 111
|
|
424
|
+
110 JSP = JSP-JST
|
|
425
|
+
IF (IRREG .NE. 1) JSP = JSP-L
|
|
426
|
+
111 CONTINUE
|
|
427
|
+
C
|
|
428
|
+
C REGULAR REDUCTION
|
|
429
|
+
C
|
|
430
|
+
CALL COSGEN (JST,1,0.5,0.0,TCOS)
|
|
431
|
+
IF (L .GT. JSP) GO TO 118
|
|
432
|
+
DO 117 J=L,JSP,L
|
|
433
|
+
JM1 = J-JSH
|
|
434
|
+
JP1 = J+JSH
|
|
435
|
+
JM2 = J-JST
|
|
436
|
+
JP2 = J+JST
|
|
437
|
+
JM3 = JM2-JSH
|
|
438
|
+
JP3 = JP2+JSH
|
|
439
|
+
IF (JST .NE. 1) GO TO 113
|
|
440
|
+
DO 112 I=1,M
|
|
441
|
+
B(I) = 2.*Q(I,J)
|
|
442
|
+
Q(I,J) = Q(I,JM2)+Q(I,JP2)
|
|
443
|
+
112 CONTINUE
|
|
444
|
+
GO TO 115
|
|
445
|
+
113 DO 114 I=1,M
|
|
446
|
+
T = Q(I,J)-Q(I,JM1)-Q(I,JP1)+Q(I,JM2)+Q(I,JP2)
|
|
447
|
+
B(I) = T+Q(I,J)-Q(I,JM3)-Q(I,JP3)
|
|
448
|
+
Q(I,J) = T
|
|
449
|
+
114 CONTINUE
|
|
450
|
+
115 CONTINUE
|
|
451
|
+
CALL TRIX (JST,0,M,BA,BB,BC,B,TCOS,D,W)
|
|
452
|
+
DO 116 I=1,M
|
|
453
|
+
Q(I,J) = Q(I,J)+B(I)
|
|
454
|
+
116 CONTINUE
|
|
455
|
+
117 CONTINUE
|
|
456
|
+
C
|
|
457
|
+
C REDUCTION FOR LAST UNKNOWN
|
|
458
|
+
C
|
|
459
|
+
118 GO TO (119,136),NODD
|
|
460
|
+
119 GO TO (152,120),IRREG
|
|
461
|
+
C
|
|
462
|
+
C ODD NUMBER OF UNKNOWNS
|
|
463
|
+
C
|
|
464
|
+
120 JSP = JSP+L
|
|
465
|
+
J = JSP
|
|
466
|
+
JM1 = J-JSH
|
|
467
|
+
JP1 = J+JSH
|
|
468
|
+
JM2 = J-JST
|
|
469
|
+
JP2 = J+JST
|
|
470
|
+
JM3 = JM2-JSH
|
|
471
|
+
GO TO (123,121),ISTAG
|
|
472
|
+
121 CONTINUE
|
|
473
|
+
IF (JST .NE. 1) GO TO 123
|
|
474
|
+
DO 122 I=1,M
|
|
475
|
+
B(I) = Q(I,J)
|
|
476
|
+
Q(I,J) = 0.
|
|
477
|
+
122 CONTINUE
|
|
478
|
+
GO TO 130
|
|
479
|
+
123 GO TO (124,126),NODDPR
|
|
480
|
+
124 DO 125 I=1,M
|
|
481
|
+
IP1 = IP+I
|
|
482
|
+
B(I) = .5*(Q(I,JM2)-Q(I,JM1)-Q(I,JM3))+P(IP1)+Q(I,J)
|
|
483
|
+
125 CONTINUE
|
|
484
|
+
GO TO 128
|
|
485
|
+
126 DO 127 I=1,M
|
|
486
|
+
B(I) = .5*(Q(I,JM2)-Q(I,JM1)-Q(I,JM3))+Q(I,JP2)-Q(I,JP1)+Q(I,J)
|
|
487
|
+
127 CONTINUE
|
|
488
|
+
128 DO 129 I=1,M
|
|
489
|
+
Q(I,J) = .5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
|
|
490
|
+
129 CONTINUE
|
|
491
|
+
130 CALL TRIX (JST,0,M,BA,BB,BC,B,TCOS,D,W)
|
|
492
|
+
IP = IP+M
|
|
493
|
+
IPSTOR = MAX0(IPSTOR,IP+M)
|
|
494
|
+
DO 131 I=1,M
|
|
495
|
+
IP1 = IP+I
|
|
496
|
+
P(IP1) = Q(I,J)+B(I)
|
|
497
|
+
B(I) = Q(I,JP2)+P(IP1)
|
|
498
|
+
131 CONTINUE
|
|
499
|
+
IF (LR .NE. 0) GO TO 133
|
|
500
|
+
DO 132 I=1,JST
|
|
501
|
+
KRPI = KR+I
|
|
502
|
+
TCOS(KRPI) = TCOS(I)
|
|
503
|
+
132 CONTINUE
|
|
504
|
+
GO TO 134
|
|
505
|
+
133 CONTINUE
|
|
506
|
+
CALL COSGEN (LR,JSTSAV,0.,FI,TCOS(JST+1))
|
|
507
|
+
CALL MERGE (TCOS,0,JST,JST,LR,KR)
|
|
508
|
+
134 CONTINUE
|
|
509
|
+
CALL COSGEN (KR,JSTSAV,0.0,FI,TCOS)
|
|
510
|
+
CALL TRIX (KR,KR,M,BA,BB,BC,B,TCOS,D,W)
|
|
511
|
+
DO 135 I=1,M
|
|
512
|
+
IP1 = IP+I
|
|
513
|
+
Q(I,J) = Q(I,JM2)+B(I)+P(IP1)
|
|
514
|
+
135 CONTINUE
|
|
515
|
+
LR = KR
|
|
516
|
+
KR = KR+L
|
|
517
|
+
GO TO 152
|
|
518
|
+
C
|
|
519
|
+
C EVEN NUMBER OF UNKNOWNS
|
|
520
|
+
C
|
|
521
|
+
136 JSP = JSP+L
|
|
522
|
+
J = JSP
|
|
523
|
+
JM1 = J-JSH
|
|
524
|
+
JP1 = J+JSH
|
|
525
|
+
JM2 = J-JST
|
|
526
|
+
JP2 = J+JST
|
|
527
|
+
JM3 = JM2-JSH
|
|
528
|
+
GO TO (137,138),IRREG
|
|
529
|
+
137 CONTINUE
|
|
530
|
+
JSTSAV = JST
|
|
531
|
+
IDEG = JST
|
|
532
|
+
KR = L
|
|
533
|
+
GO TO 139
|
|
534
|
+
138 CALL COSGEN (KR,JSTSAV,0.0,FI,TCOS)
|
|
535
|
+
CALL COSGEN (LR,JSTSAV,0.0,FI,TCOS(KR+1))
|
|
536
|
+
IDEG = KR
|
|
537
|
+
KR = KR+JST
|
|
538
|
+
139 IF (JST .NE. 1) GO TO 141
|
|
539
|
+
IRREG = 2
|
|
540
|
+
DO 140 I=1,M
|
|
541
|
+
B(I) = Q(I,J)
|
|
542
|
+
Q(I,J) = Q(I,JM2)
|
|
543
|
+
140 CONTINUE
|
|
544
|
+
GO TO 150
|
|
545
|
+
141 DO 142 I=1,M
|
|
546
|
+
B(I) = Q(I,J)+.5*(Q(I,JM2)-Q(I,JM1)-Q(I,JM3))
|
|
547
|
+
142 CONTINUE
|
|
548
|
+
GO TO (143,145),IRREG
|
|
549
|
+
143 DO 144 I=1,M
|
|
550
|
+
Q(I,J) = Q(I,JM2)+.5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
|
|
551
|
+
144 CONTINUE
|
|
552
|
+
IRREG = 2
|
|
553
|
+
GO TO 150
|
|
554
|
+
145 CONTINUE
|
|
555
|
+
GO TO (146,148),NODDPR
|
|
556
|
+
146 DO 147 I=1,M
|
|
557
|
+
IP1 = IP+I
|
|
558
|
+
Q(I,J) = Q(I,JM2)+P(IP1)
|
|
559
|
+
147 CONTINUE
|
|
560
|
+
IP = IP-M
|
|
561
|
+
GO TO 150
|
|
562
|
+
148 DO 149 I=1,M
|
|
563
|
+
Q(I,J) = Q(I,JM2)+Q(I,J)-Q(I,JM1)
|
|
564
|
+
149 CONTINUE
|
|
565
|
+
150 CALL TRIX (IDEG,LR,M,BA,BB,BC,B,TCOS,D,W)
|
|
566
|
+
DO 151 I=1,M
|
|
567
|
+
Q(I,J) = Q(I,J)+B(I)
|
|
568
|
+
151 CONTINUE
|
|
569
|
+
152 NUN = NUN/2
|
|
570
|
+
NODDPR = NODD
|
|
571
|
+
JSH = JST
|
|
572
|
+
JST = 2*JST
|
|
573
|
+
IF (NUN .GE. 2) GO TO 108
|
|
574
|
+
C
|
|
575
|
+
C START SOLUTION.
|
|
576
|
+
C
|
|
577
|
+
J = JSP
|
|
578
|
+
DO 153 I=1,M
|
|
579
|
+
B(I) = Q(I,J)
|
|
580
|
+
153 CONTINUE
|
|
581
|
+
GO TO (154,155),IRREG
|
|
582
|
+
154 CONTINUE
|
|
583
|
+
CALL COSGEN (JST,1,0.5,0.0,TCOS)
|
|
584
|
+
IDEG = JST
|
|
585
|
+
GO TO 156
|
|
586
|
+
155 KR = LR+JST
|
|
587
|
+
CALL COSGEN (KR,JSTSAV,0.0,FI,TCOS)
|
|
588
|
+
CALL COSGEN (LR,JSTSAV,0.0,FI,TCOS(KR+1))
|
|
589
|
+
IDEG = KR
|
|
590
|
+
156 CONTINUE
|
|
591
|
+
CALL TRIX (IDEG,LR,M,BA,BB,BC,B,TCOS,D,W)
|
|
592
|
+
JM1 = J-JSH
|
|
593
|
+
JP1 = J+JSH
|
|
594
|
+
GO TO (157,159),IRREG
|
|
595
|
+
157 DO 158 I=1,M
|
|
596
|
+
Q(I,J) = .5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))+B(I)
|
|
597
|
+
158 CONTINUE
|
|
598
|
+
GO TO 164
|
|
599
|
+
159 GO TO (160,162),NODDPR
|
|
600
|
+
160 DO 161 I=1,M
|
|
601
|
+
IP1 = IP+I
|
|
602
|
+
Q(I,J) = P(IP1)+B(I)
|
|
603
|
+
161 CONTINUE
|
|
604
|
+
IP = IP-M
|
|
605
|
+
GO TO 164
|
|
606
|
+
162 DO 163 I=1,M
|
|
607
|
+
Q(I,J) = Q(I,J)-Q(I,JM1)+B(I)
|
|
608
|
+
163 CONTINUE
|
|
609
|
+
164 CONTINUE
|
|
610
|
+
C
|
|
611
|
+
C START BACK SUBSTITUTION.
|
|
612
|
+
C
|
|
613
|
+
JST = JST/2
|
|
614
|
+
JSH = JST/2
|
|
615
|
+
NUN = 2*NUN
|
|
616
|
+
IF (NUN .GT. N) GO TO 183
|
|
617
|
+
DO 182 J=JST,N,L
|
|
618
|
+
JM1 = J-JSH
|
|
619
|
+
JP1 = J+JSH
|
|
620
|
+
JM2 = J-JST
|
|
621
|
+
JP2 = J+JST
|
|
622
|
+
IF (J .GT. JST) GO TO 166
|
|
623
|
+
DO 165 I=1,M
|
|
624
|
+
B(I) = Q(I,J)+Q(I,JP2)
|
|
625
|
+
165 CONTINUE
|
|
626
|
+
GO TO 170
|
|
627
|
+
166 IF (JP2 .LE. N) GO TO 168
|
|
628
|
+
DO 167 I=1,M
|
|
629
|
+
B(I) = Q(I,J)+Q(I,JM2)
|
|
630
|
+
167 CONTINUE
|
|
631
|
+
IF (JST .LT. JSTSAV) IRREG = 1
|
|
632
|
+
GO TO (170,171),IRREG
|
|
633
|
+
168 DO 169 I=1,M
|
|
634
|
+
B(I) = Q(I,J)+Q(I,JM2)+Q(I,JP2)
|
|
635
|
+
169 CONTINUE
|
|
636
|
+
170 CONTINUE
|
|
637
|
+
CALL COSGEN (JST,1,0.5,0.0,TCOS)
|
|
638
|
+
IDEG = JST
|
|
639
|
+
JDEG = 0
|
|
640
|
+
GO TO 172
|
|
641
|
+
171 IF (J+L .GT. N) LR = LR-JST
|
|
642
|
+
KR = JST+LR
|
|
643
|
+
CALL COSGEN (KR,JSTSAV,0.0,FI,TCOS)
|
|
644
|
+
CALL COSGEN (LR,JSTSAV,0.0,FI,TCOS(KR+1))
|
|
645
|
+
IDEG = KR
|
|
646
|
+
JDEG = LR
|
|
647
|
+
172 CONTINUE
|
|
648
|
+
CALL TRIX (IDEG,JDEG,M,BA,BB,BC,B,TCOS,D,W)
|
|
649
|
+
IF (JST .GT. 1) GO TO 174
|
|
650
|
+
DO 173 I=1,M
|
|
651
|
+
Q(I,J) = B(I)
|
|
652
|
+
173 CONTINUE
|
|
653
|
+
GO TO 182
|
|
654
|
+
174 IF (JP2 .GT. N) GO TO 177
|
|
655
|
+
175 DO 176 I=1,M
|
|
656
|
+
Q(I,J) = .5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))+B(I)
|
|
657
|
+
176 CONTINUE
|
|
658
|
+
GO TO 182
|
|
659
|
+
177 GO TO (175,178),IRREG
|
|
660
|
+
178 IF (J+JSH .GT. N) GO TO 180
|
|
661
|
+
DO 179 I=1,M
|
|
662
|
+
IP1 = IP+I
|
|
663
|
+
Q(I,J) = B(I)+P(IP1)
|
|
664
|
+
179 CONTINUE
|
|
665
|
+
IP = IP-M
|
|
666
|
+
GO TO 182
|
|
667
|
+
180 DO 181 I=1,M
|
|
668
|
+
Q(I,J) = B(I)+Q(I,J)-Q(I,JM1)
|
|
669
|
+
181 CONTINUE
|
|
670
|
+
182 CONTINUE
|
|
671
|
+
L = L/2
|
|
672
|
+
GO TO 164
|
|
673
|
+
183 CONTINUE
|
|
674
|
+
C
|
|
675
|
+
C RETURN STORAGE REQUIREMENTS FOR P VECTORS.
|
|
676
|
+
C
|
|
677
|
+
W(1) = IPSTOR
|
|
678
|
+
RETURN
|
|
679
|
+
END
|
|
680
|
+
SUBROUTINE POISN2 (M,N,ISTAG,MIXBND,A,BB,C,Q,IDIMQ,B,B2,B3,W,W2,
|
|
681
|
+
1 W3,D,TCOS,P)
|
|
682
|
+
C
|
|
683
|
+
C SUBROUTINE TO SOLVE POISSON'S EQUATION WITH NEUMANN BOUNDARY
|
|
684
|
+
C CONDITIONS.
|
|
685
|
+
C
|
|
686
|
+
C ISTAG = 1 IF THE LAST DIAGONAL BLOCK IS A.
|
|
687
|
+
C ISTAG = 2 IF THE LAST DIAGONAL BLOCK IS A-I.
|
|
688
|
+
C MIXBND = 1 IF HAVE NEUMANN BOUNDARY CONDITIONS AT BOTH BOUNDARIES.
|
|
689
|
+
C MIXBND = 2 IF HAVE NEUMANN BOUNDARY CONDITIONS AT BOTTOM AND
|
|
690
|
+
C DIRICHLET CONDITION AT TOP. (FOR THIS CASE, MUST HAVE ISTAG = 1.)
|
|
691
|
+
C
|
|
692
|
+
DIMENSION A(*) ,BB(*) ,C(*) ,Q(IDIMQ,*) ,
|
|
693
|
+
1 B(*) ,B2(*) ,B3(*) ,W(*) ,
|
|
694
|
+
2 W2(*) ,W3(*) ,D(*) ,TCOS(*) ,
|
|
695
|
+
3 K(4) ,P(*)
|
|
696
|
+
EQUIVALENCE (K(1),K1) ,(K(2),K2) ,(K(3),K3) ,(K(4),K4)
|
|
697
|
+
FISTAG = 3-ISTAG
|
|
698
|
+
FNUM = 1./FLOAT(ISTAG)
|
|
699
|
+
FDEN = 0.5*FLOAT(ISTAG-1)
|
|
700
|
+
MR = M
|
|
701
|
+
IP = -MR
|
|
702
|
+
IPSTOR = 0
|
|
703
|
+
I2R = 1
|
|
704
|
+
JR = 2
|
|
705
|
+
NR = N
|
|
706
|
+
NLAST = N
|
|
707
|
+
KR = 1
|
|
708
|
+
LR = 0
|
|
709
|
+
GO TO (101,103),ISTAG
|
|
710
|
+
101 CONTINUE
|
|
711
|
+
DO 102 I=1,MR
|
|
712
|
+
Q(I,N) = .5*Q(I,N)
|
|
713
|
+
102 CONTINUE
|
|
714
|
+
GO TO (103,104),MIXBND
|
|
715
|
+
103 IF (N .LE. 3) GO TO 155
|
|
716
|
+
104 CONTINUE
|
|
717
|
+
JR = 2*I2R
|
|
718
|
+
NROD = 1
|
|
719
|
+
IF ((NR/2)*2 .EQ. NR) NROD = 0
|
|
720
|
+
GO TO (105,106),MIXBND
|
|
721
|
+
105 JSTART = 1
|
|
722
|
+
GO TO 107
|
|
723
|
+
106 JSTART = JR
|
|
724
|
+
NROD = 1-NROD
|
|
725
|
+
107 CONTINUE
|
|
726
|
+
JSTOP = NLAST-JR
|
|
727
|
+
IF (NROD .EQ. 0) JSTOP = JSTOP-I2R
|
|
728
|
+
CALL COSGEN (I2R,1,0.5,0.0,TCOS)
|
|
729
|
+
I2RBY2 = I2R/2
|
|
730
|
+
IF (JSTOP .GE. JSTART) GO TO 108
|
|
731
|
+
J = JR
|
|
732
|
+
GO TO 116
|
|
733
|
+
108 CONTINUE
|
|
734
|
+
C
|
|
735
|
+
C REGULAR REDUCTION.
|
|
736
|
+
C
|
|
737
|
+
DO 115 J=JSTART,JSTOP,JR
|
|
738
|
+
JP1 = J+I2RBY2
|
|
739
|
+
JP2 = J+I2R
|
|
740
|
+
JP3 = JP2+I2RBY2
|
|
741
|
+
JM1 = J-I2RBY2
|
|
742
|
+
JM2 = J-I2R
|
|
743
|
+
JM3 = JM2-I2RBY2
|
|
744
|
+
IF (J .NE. 1) GO TO 109
|
|
745
|
+
JM1 = JP1
|
|
746
|
+
JM2 = JP2
|
|
747
|
+
JM3 = JP3
|
|
748
|
+
109 CONTINUE
|
|
749
|
+
IF (I2R .NE. 1) GO TO 111
|
|
750
|
+
IF (J .EQ. 1) JM2 = JP2
|
|
751
|
+
DO 110 I=1,MR
|
|
752
|
+
B(I) = 2.*Q(I,J)
|
|
753
|
+
Q(I,J) = Q(I,JM2)+Q(I,JP2)
|
|
754
|
+
110 CONTINUE
|
|
755
|
+
GO TO 113
|
|
756
|
+
111 CONTINUE
|
|
757
|
+
DO 112 I=1,MR
|
|
758
|
+
FI = Q(I,J)
|
|
759
|
+
Q(I,J) = Q(I,J)-Q(I,JM1)-Q(I,JP1)+Q(I,JM2)+Q(I,JP2)
|
|
760
|
+
B(I) = FI+Q(I,J)-Q(I,JM3)-Q(I,JP3)
|
|
761
|
+
112 CONTINUE
|
|
762
|
+
113 CONTINUE
|
|
763
|
+
CALL TRIX (I2R,0,MR,A,BB,C,B,TCOS,D,W)
|
|
764
|
+
DO 114 I=1,MR
|
|
765
|
+
Q(I,J) = Q(I,J)+B(I)
|
|
766
|
+
114 CONTINUE
|
|
767
|
+
C
|
|
768
|
+
C END OF REDUCTION FOR REGULAR UNKNOWNS.
|
|
769
|
+
C
|
|
770
|
+
115 CONTINUE
|
|
771
|
+
C
|
|
772
|
+
C BEGIN SPECIAL REDUCTION FOR LAST UNKNOWN.
|
|
773
|
+
C
|
|
774
|
+
J = JSTOP+JR
|
|
775
|
+
116 NLAST = J
|
|
776
|
+
JM1 = J-I2RBY2
|
|
777
|
+
JM2 = J-I2R
|
|
778
|
+
JM3 = JM2-I2RBY2
|
|
779
|
+
IF (NROD .EQ. 0) GO TO 128
|
|
780
|
+
C
|
|
781
|
+
C ODD NUMBER OF UNKNOWNS
|
|
782
|
+
C
|
|
783
|
+
IF (I2R .NE. 1) GO TO 118
|
|
784
|
+
DO 117 I=1,MR
|
|
785
|
+
B(I) = FISTAG*Q(I,J)
|
|
786
|
+
Q(I,J) = Q(I,JM2)
|
|
787
|
+
117 CONTINUE
|
|
788
|
+
GO TO 126
|
|
789
|
+
118 DO 119 I=1,MR
|
|
790
|
+
B(I) = Q(I,J)+.5*(Q(I,JM2)-Q(I,JM1)-Q(I,JM3))
|
|
791
|
+
119 CONTINUE
|
|
792
|
+
IF (NRODPR .NE. 0) GO TO 121
|
|
793
|
+
DO 120 I=1,MR
|
|
794
|
+
II = IP+I
|
|
795
|
+
Q(I,J) = Q(I,JM2)+P(II)
|
|
796
|
+
120 CONTINUE
|
|
797
|
+
IP = IP-MR
|
|
798
|
+
GO TO 123
|
|
799
|
+
121 CONTINUE
|
|
800
|
+
DO 122 I=1,MR
|
|
801
|
+
Q(I,J) = Q(I,J)-Q(I,JM1)+Q(I,JM2)
|
|
802
|
+
122 CONTINUE
|
|
803
|
+
123 IF (LR .EQ. 0) GO TO 124
|
|
804
|
+
CALL COSGEN (LR,1,0.5,FDEN,TCOS(KR+1))
|
|
805
|
+
GO TO 126
|
|
806
|
+
124 CONTINUE
|
|
807
|
+
DO 125 I=1,MR
|
|
808
|
+
B(I) = FISTAG*B(I)
|
|
809
|
+
125 CONTINUE
|
|
810
|
+
126 CONTINUE
|
|
811
|
+
CALL COSGEN (KR,1,0.5,FDEN,TCOS)
|
|
812
|
+
CALL TRIX (KR,LR,MR,A,BB,C,B,TCOS,D,W)
|
|
813
|
+
DO 127 I=1,MR
|
|
814
|
+
Q(I,J) = Q(I,J)+B(I)
|
|
815
|
+
127 CONTINUE
|
|
816
|
+
KR = KR+I2R
|
|
817
|
+
GO TO 151
|
|
818
|
+
128 CONTINUE
|
|
819
|
+
C
|
|
820
|
+
C EVEN NUMBER OF UNKNOWNS
|
|
821
|
+
C
|
|
822
|
+
JP1 = J+I2RBY2
|
|
823
|
+
JP2 = J+I2R
|
|
824
|
+
IF (I2R .NE. 1) GO TO 135
|
|
825
|
+
DO 129 I=1,MR
|
|
826
|
+
B(I) = Q(I,J)
|
|
827
|
+
129 CONTINUE
|
|
828
|
+
CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
|
|
829
|
+
IP = 0
|
|
830
|
+
IPSTOR = MR
|
|
831
|
+
GO TO (133,130),ISTAG
|
|
832
|
+
130 DO 131 I=1,MR
|
|
833
|
+
P(I) = B(I)
|
|
834
|
+
B(I) = B(I)+Q(I,N)
|
|
835
|
+
131 CONTINUE
|
|
836
|
+
TCOS(1) = 1.
|
|
837
|
+
TCOS(2) = 0.
|
|
838
|
+
CALL TRIX (1,1,MR,A,BB,C,B,TCOS,D,W)
|
|
839
|
+
DO 132 I=1,MR
|
|
840
|
+
Q(I,J) = Q(I,JM2)+P(I)+B(I)
|
|
841
|
+
132 CONTINUE
|
|
842
|
+
GO TO 150
|
|
843
|
+
133 CONTINUE
|
|
844
|
+
DO 134 I=1,MR
|
|
845
|
+
P(I) = B(I)
|
|
846
|
+
Q(I,J) = Q(I,JM2)+2.*Q(I,JP2)+3.*B(I)
|
|
847
|
+
134 CONTINUE
|
|
848
|
+
GO TO 150
|
|
849
|
+
135 CONTINUE
|
|
850
|
+
DO 136 I=1,MR
|
|
851
|
+
B(I) = Q(I,J)+.5*(Q(I,JM2)-Q(I,JM1)-Q(I,JM3))
|
|
852
|
+
136 CONTINUE
|
|
853
|
+
IF (NRODPR .NE. 0) GO TO 138
|
|
854
|
+
DO 137 I=1,MR
|
|
855
|
+
II = IP+I
|
|
856
|
+
B(I) = B(I)+P(II)
|
|
857
|
+
137 CONTINUE
|
|
858
|
+
GO TO 140
|
|
859
|
+
138 CONTINUE
|
|
860
|
+
DO 139 I=1,MR
|
|
861
|
+
B(I) = B(I)+Q(I,JP2)-Q(I,JP1)
|
|
862
|
+
139 CONTINUE
|
|
863
|
+
140 CONTINUE
|
|
864
|
+
CALL TRIX (I2R,0,MR,A,BB,C,B,TCOS,D,W)
|
|
865
|
+
IP = IP+MR
|
|
866
|
+
IPSTOR = MAX0(IPSTOR,IP+MR)
|
|
867
|
+
DO 141 I=1,MR
|
|
868
|
+
II = IP+I
|
|
869
|
+
P(II) = B(I)+.5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
|
|
870
|
+
B(I) = P(II)+Q(I,JP2)
|
|
871
|
+
141 CONTINUE
|
|
872
|
+
IF (LR .EQ. 0) GO TO 142
|
|
873
|
+
CALL COSGEN (LR,1,0.5,FDEN,TCOS(I2R+1))
|
|
874
|
+
CALL MERGE (TCOS,0,I2R,I2R,LR,KR)
|
|
875
|
+
GO TO 144
|
|
876
|
+
142 DO 143 I=1,I2R
|
|
877
|
+
II = KR+I
|
|
878
|
+
TCOS(II) = TCOS(I)
|
|
879
|
+
143 CONTINUE
|
|
880
|
+
144 CALL COSGEN (KR,1,0.5,FDEN,TCOS)
|
|
881
|
+
IF (LR .NE. 0) GO TO 145
|
|
882
|
+
GO TO (146,145),ISTAG
|
|
883
|
+
145 CONTINUE
|
|
884
|
+
CALL TRIX (KR,KR,MR,A,BB,C,B,TCOS,D,W)
|
|
885
|
+
GO TO 148
|
|
886
|
+
146 CONTINUE
|
|
887
|
+
DO 147 I=1,MR
|
|
888
|
+
B(I) = FISTAG*B(I)
|
|
889
|
+
147 CONTINUE
|
|
890
|
+
148 CONTINUE
|
|
891
|
+
DO 149 I=1,MR
|
|
892
|
+
II = IP+I
|
|
893
|
+
Q(I,J) = Q(I,JM2)+P(II)+B(I)
|
|
894
|
+
149 CONTINUE
|
|
895
|
+
150 CONTINUE
|
|
896
|
+
LR = KR
|
|
897
|
+
KR = KR+JR
|
|
898
|
+
151 CONTINUE
|
|
899
|
+
GO TO (152,153),MIXBND
|
|
900
|
+
152 NR = (NLAST-1)/JR+1
|
|
901
|
+
IF (NR .LE. 3) GO TO 155
|
|
902
|
+
GO TO 154
|
|
903
|
+
153 NR = NLAST/JR
|
|
904
|
+
IF (NR .LE. 1) GO TO 192
|
|
905
|
+
154 I2R = JR
|
|
906
|
+
NRODPR = NROD
|
|
907
|
+
GO TO 104
|
|
908
|
+
155 CONTINUE
|
|
909
|
+
C
|
|
910
|
+
C BEGIN SOLUTION
|
|
911
|
+
C
|
|
912
|
+
J = 1+JR
|
|
913
|
+
JM1 = J-I2R
|
|
914
|
+
JP1 = J+I2R
|
|
915
|
+
JM2 = NLAST-I2R
|
|
916
|
+
IF (NR .EQ. 2) GO TO 184
|
|
917
|
+
IF (LR .NE. 0) GO TO 170
|
|
918
|
+
IF (N .NE. 3) GO TO 161
|
|
919
|
+
C
|
|
920
|
+
C CASE N = 3.
|
|
921
|
+
C
|
|
922
|
+
GO TO (156,168),ISTAG
|
|
923
|
+
156 CONTINUE
|
|
924
|
+
DO 157 I=1,MR
|
|
925
|
+
B(I) = Q(I,2)
|
|
926
|
+
157 CONTINUE
|
|
927
|
+
TCOS(1) = 0.
|
|
928
|
+
CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
|
|
929
|
+
DO 158 I=1,MR
|
|
930
|
+
Q(I,2) = B(I)
|
|
931
|
+
B(I) = 4.*B(I)+Q(I,1)+2.*Q(I,3)
|
|
932
|
+
158 CONTINUE
|
|
933
|
+
TCOS(1) = -2.
|
|
934
|
+
TCOS(2) = 2.
|
|
935
|
+
I1 = 2
|
|
936
|
+
I2 = 0
|
|
937
|
+
CALL TRIX (I1,I2,MR,A,BB,C,B,TCOS,D,W)
|
|
938
|
+
DO 159 I=1,MR
|
|
939
|
+
Q(I,2) = Q(I,2)+B(I)
|
|
940
|
+
B(I) = Q(I,1)+2.*Q(I,2)
|
|
941
|
+
159 CONTINUE
|
|
942
|
+
TCOS(1) = 0.
|
|
943
|
+
CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
|
|
944
|
+
DO 160 I=1,MR
|
|
945
|
+
Q(I,1) = B(I)
|
|
946
|
+
160 CONTINUE
|
|
947
|
+
JR = 1
|
|
948
|
+
I2R = 0
|
|
949
|
+
GO TO 194
|
|
950
|
+
C
|
|
951
|
+
C CASE N = 2**P+1
|
|
952
|
+
C
|
|
953
|
+
161 CONTINUE
|
|
954
|
+
GO TO (162,170),ISTAG
|
|
955
|
+
162 CONTINUE
|
|
956
|
+
DO 163 I=1,MR
|
|
957
|
+
B(I) = Q(I,J)+.5*Q(I,1)-Q(I,JM1)+Q(I,NLAST)-Q(I,JM2)
|
|
958
|
+
163 CONTINUE
|
|
959
|
+
CALL COSGEN (JR,1,0.5,0.0,TCOS)
|
|
960
|
+
CALL TRIX (JR,0,MR,A,BB,C,B,TCOS,D,W)
|
|
961
|
+
DO 164 I=1,MR
|
|
962
|
+
Q(I,J) = .5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))+B(I)
|
|
963
|
+
B(I) = Q(I,1)+2.*Q(I,NLAST)+4.*Q(I,J)
|
|
964
|
+
164 CONTINUE
|
|
965
|
+
JR2 = 2*JR
|
|
966
|
+
CALL COSGEN (JR,1,0.0,0.0,TCOS)
|
|
967
|
+
DO 165 I=1,JR
|
|
968
|
+
I1 = JR+I
|
|
969
|
+
I2 = JR+1-I
|
|
970
|
+
TCOS(I1) = -TCOS(I2)
|
|
971
|
+
165 CONTINUE
|
|
972
|
+
CALL TRIX (JR2,0,MR,A,BB,C,B,TCOS,D,W)
|
|
973
|
+
DO 166 I=1,MR
|
|
974
|
+
Q(I,J) = Q(I,J)+B(I)
|
|
975
|
+
B(I) = Q(I,1)+2.*Q(I,J)
|
|
976
|
+
166 CONTINUE
|
|
977
|
+
CALL COSGEN (JR,1,0.5,0.0,TCOS)
|
|
978
|
+
CALL TRIX (JR,0,MR,A,BB,C,B,TCOS,D,W)
|
|
979
|
+
DO 167 I=1,MR
|
|
980
|
+
Q(I,1) = .5*Q(I,1)-Q(I,JM1)+B(I)
|
|
981
|
+
167 CONTINUE
|
|
982
|
+
GO TO 194
|
|
983
|
+
C
|
|
984
|
+
C CASE OF GENERAL N WITH NR = 3 .
|
|
985
|
+
C
|
|
986
|
+
168 DO 169 I=1,MR
|
|
987
|
+
B(I) = Q(I,2)
|
|
988
|
+
Q(I,2) = 0.
|
|
989
|
+
B2(I) = Q(I,3)
|
|
990
|
+
B3(I) = Q(I,1)
|
|
991
|
+
169 CONTINUE
|
|
992
|
+
JR = 1
|
|
993
|
+
I2R = 0
|
|
994
|
+
J = 2
|
|
995
|
+
GO TO 177
|
|
996
|
+
170 CONTINUE
|
|
997
|
+
DO 171 I=1,MR
|
|
998
|
+
B(I) = .5*Q(I,1)-Q(I,JM1)+Q(I,J)
|
|
999
|
+
171 CONTINUE
|
|
1000
|
+
IF (NROD .NE. 0) GO TO 173
|
|
1001
|
+
DO 172 I=1,MR
|
|
1002
|
+
II = IP+I
|
|
1003
|
+
B(I) = B(I)+P(II)
|
|
1004
|
+
172 CONTINUE
|
|
1005
|
+
GO TO 175
|
|
1006
|
+
173 DO 174 I=1,MR
|
|
1007
|
+
B(I) = B(I)+Q(I,NLAST)-Q(I,JM2)
|
|
1008
|
+
174 CONTINUE
|
|
1009
|
+
175 CONTINUE
|
|
1010
|
+
DO 176 I=1,MR
|
|
1011
|
+
T = .5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
|
|
1012
|
+
Q(I,J) = T
|
|
1013
|
+
B2(I) = Q(I,NLAST)+T
|
|
1014
|
+
B3(I) = Q(I,1)+2.*T
|
|
1015
|
+
176 CONTINUE
|
|
1016
|
+
177 CONTINUE
|
|
1017
|
+
K1 = KR+2*JR-1
|
|
1018
|
+
K2 = KR+JR
|
|
1019
|
+
TCOS(K1+1) = -2.
|
|
1020
|
+
K4 = K1+3-ISTAG
|
|
1021
|
+
CALL COSGEN (K2+ISTAG-2,1,0.0,FNUM,TCOS(K4))
|
|
1022
|
+
K4 = K1+K2+1
|
|
1023
|
+
CALL COSGEN (JR-1,1,0.0,1.0,TCOS(K4))
|
|
1024
|
+
CALL MERGE (TCOS,K1,K2,K1+K2,JR-1,0)
|
|
1025
|
+
K3 = K1+K2+LR
|
|
1026
|
+
CALL COSGEN (JR,1,0.5,0.0,TCOS(K3+1))
|
|
1027
|
+
K4 = K3+JR+1
|
|
1028
|
+
CALL COSGEN (KR,1,0.5,FDEN,TCOS(K4))
|
|
1029
|
+
CALL MERGE (TCOS,K3,JR,K3+JR,KR,K1)
|
|
1030
|
+
IF (LR .EQ. 0) GO TO 178
|
|
1031
|
+
CALL COSGEN (LR,1,0.5,FDEN,TCOS(K4))
|
|
1032
|
+
CALL MERGE (TCOS,K3,JR,K3+JR,LR,K3-LR)
|
|
1033
|
+
CALL COSGEN (KR,1,0.5,FDEN,TCOS(K4))
|
|
1034
|
+
178 K3 = KR
|
|
1035
|
+
K4 = KR
|
|
1036
|
+
CALL TRI3 (MR,A,BB,C,K,B,B2,B3,TCOS,D,W,W2,W3)
|
|
1037
|
+
DO 179 I=1,MR
|
|
1038
|
+
B(I) = B(I)+B2(I)+B3(I)
|
|
1039
|
+
179 CONTINUE
|
|
1040
|
+
TCOS(1) = 2.
|
|
1041
|
+
CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
|
|
1042
|
+
DO 180 I=1,MR
|
|
1043
|
+
Q(I,J) = Q(I,J)+B(I)
|
|
1044
|
+
B(I) = Q(I,1)+2.*Q(I,J)
|
|
1045
|
+
180 CONTINUE
|
|
1046
|
+
CALL COSGEN (JR,1,0.5,0.0,TCOS)
|
|
1047
|
+
CALL TRIX (JR,0,MR,A,BB,C,B,TCOS,D,W)
|
|
1048
|
+
IF (JR .NE. 1) GO TO 182
|
|
1049
|
+
DO 181 I=1,MR
|
|
1050
|
+
Q(I,1) = B(I)
|
|
1051
|
+
181 CONTINUE
|
|
1052
|
+
GO TO 194
|
|
1053
|
+
182 CONTINUE
|
|
1054
|
+
DO 183 I=1,MR
|
|
1055
|
+
Q(I,1) = .5*Q(I,1)-Q(I,JM1)+B(I)
|
|
1056
|
+
183 CONTINUE
|
|
1057
|
+
GO TO 194
|
|
1058
|
+
184 CONTINUE
|
|
1059
|
+
IF (N .NE. 2) GO TO 188
|
|
1060
|
+
C
|
|
1061
|
+
C CASE N = 2
|
|
1062
|
+
C
|
|
1063
|
+
DO 185 I=1,MR
|
|
1064
|
+
B(I) = Q(I,1)
|
|
1065
|
+
185 CONTINUE
|
|
1066
|
+
TCOS(1) = 0.
|
|
1067
|
+
CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
|
|
1068
|
+
DO 186 I=1,MR
|
|
1069
|
+
Q(I,1) = B(I)
|
|
1070
|
+
B(I) = 2.*(Q(I,2)+B(I))*FISTAG
|
|
1071
|
+
186 CONTINUE
|
|
1072
|
+
TCOS(1) = -FISTAG
|
|
1073
|
+
TCOS(2) = 2.
|
|
1074
|
+
CALL TRIX (2,0,MR,A,BB,C,B,TCOS,D,W)
|
|
1075
|
+
DO 187 I=1,MR
|
|
1076
|
+
Q(I,1) = Q(I,1)+B(I)
|
|
1077
|
+
187 CONTINUE
|
|
1078
|
+
JR = 1
|
|
1079
|
+
I2R = 0
|
|
1080
|
+
GO TO 194
|
|
1081
|
+
188 CONTINUE
|
|
1082
|
+
C
|
|
1083
|
+
C CASE OF GENERAL N AND NR = 2 .
|
|
1084
|
+
C
|
|
1085
|
+
DO 189 I=1,MR
|
|
1086
|
+
II = IP+I
|
|
1087
|
+
B3(I) = 0.
|
|
1088
|
+
B(I) = Q(I,1)+2.*P(II)
|
|
1089
|
+
Q(I,1) = .5*Q(I,1)-Q(I,JM1)
|
|
1090
|
+
B2(I) = 2.*(Q(I,1)+Q(I,NLAST))
|
|
1091
|
+
189 CONTINUE
|
|
1092
|
+
K1 = KR+JR-1
|
|
1093
|
+
TCOS(K1+1) = -2.
|
|
1094
|
+
K4 = K1+3-ISTAG
|
|
1095
|
+
CALL COSGEN (KR+ISTAG-2,1,0.0,FNUM,TCOS(K4))
|
|
1096
|
+
K4 = K1+KR+1
|
|
1097
|
+
CALL COSGEN (JR-1,1,0.0,1.0,TCOS(K4))
|
|
1098
|
+
CALL MERGE (TCOS,K1,KR,K1+KR,JR-1,0)
|
|
1099
|
+
CALL COSGEN (KR,1,0.5,FDEN,TCOS(K1+1))
|
|
1100
|
+
K2 = KR
|
|
1101
|
+
K4 = K1+K2+1
|
|
1102
|
+
CALL COSGEN (LR,1,0.5,FDEN,TCOS(K4))
|
|
1103
|
+
K3 = LR
|
|
1104
|
+
K4 = 0
|
|
1105
|
+
CALL TRI3 (MR,A,BB,C,K,B,B2,B3,TCOS,D,W,W2,W3)
|
|
1106
|
+
DO 190 I=1,MR
|
|
1107
|
+
B(I) = B(I)+B2(I)
|
|
1108
|
+
190 CONTINUE
|
|
1109
|
+
TCOS(1) = 2.
|
|
1110
|
+
CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
|
|
1111
|
+
DO 191 I=1,MR
|
|
1112
|
+
Q(I,1) = Q(I,1)+B(I)
|
|
1113
|
+
191 CONTINUE
|
|
1114
|
+
GO TO 194
|
|
1115
|
+
192 DO 193 I=1,MR
|
|
1116
|
+
B(I) = Q(I,NLAST)
|
|
1117
|
+
193 CONTINUE
|
|
1118
|
+
GO TO 196
|
|
1119
|
+
194 CONTINUE
|
|
1120
|
+
C
|
|
1121
|
+
C START BACK SUBSTITUTION.
|
|
1122
|
+
C
|
|
1123
|
+
J = NLAST-JR
|
|
1124
|
+
DO 195 I=1,MR
|
|
1125
|
+
B(I) = Q(I,NLAST)+Q(I,J)
|
|
1126
|
+
195 CONTINUE
|
|
1127
|
+
196 JM2 = NLAST-I2R
|
|
1128
|
+
IF (JR .NE. 1) GO TO 198
|
|
1129
|
+
DO 197 I=1,MR
|
|
1130
|
+
Q(I,NLAST) = 0.
|
|
1131
|
+
197 CONTINUE
|
|
1132
|
+
GO TO 202
|
|
1133
|
+
198 CONTINUE
|
|
1134
|
+
IF (NROD .NE. 0) GO TO 200
|
|
1135
|
+
DO 199 I=1,MR
|
|
1136
|
+
II = IP+I
|
|
1137
|
+
Q(I,NLAST) = P(II)
|
|
1138
|
+
199 CONTINUE
|
|
1139
|
+
IP = IP-MR
|
|
1140
|
+
GO TO 202
|
|
1141
|
+
200 DO 201 I=1,MR
|
|
1142
|
+
Q(I,NLAST) = Q(I,NLAST)-Q(I,JM2)
|
|
1143
|
+
201 CONTINUE
|
|
1144
|
+
202 CONTINUE
|
|
1145
|
+
CALL COSGEN (KR,1,0.5,FDEN,TCOS)
|
|
1146
|
+
CALL COSGEN (LR,1,0.5,FDEN,TCOS(KR+1))
|
|
1147
|
+
IF (LR .NE. 0) GO TO 204
|
|
1148
|
+
DO 203 I=1,MR
|
|
1149
|
+
B(I) = FISTAG*B(I)
|
|
1150
|
+
203 CONTINUE
|
|
1151
|
+
204 CONTINUE
|
|
1152
|
+
CALL TRIX (KR,LR,MR,A,BB,C,B,TCOS,D,W)
|
|
1153
|
+
DO 205 I=1,MR
|
|
1154
|
+
Q(I,NLAST) = Q(I,NLAST)+B(I)
|
|
1155
|
+
205 CONTINUE
|
|
1156
|
+
NLASTP = NLAST
|
|
1157
|
+
206 CONTINUE
|
|
1158
|
+
JSTEP = JR
|
|
1159
|
+
JR = I2R
|
|
1160
|
+
I2R = I2R/2
|
|
1161
|
+
IF (JR .EQ. 0) GO TO 222
|
|
1162
|
+
GO TO (207,208),MIXBND
|
|
1163
|
+
207 JSTART = 1+JR
|
|
1164
|
+
GO TO 209
|
|
1165
|
+
208 JSTART = JR
|
|
1166
|
+
209 CONTINUE
|
|
1167
|
+
KR = KR-JR
|
|
1168
|
+
IF (NLAST+JR .GT. N) GO TO 210
|
|
1169
|
+
KR = KR-JR
|
|
1170
|
+
NLAST = NLAST+JR
|
|
1171
|
+
JSTOP = NLAST-JSTEP
|
|
1172
|
+
GO TO 211
|
|
1173
|
+
210 CONTINUE
|
|
1174
|
+
JSTOP = NLAST-JR
|
|
1175
|
+
211 CONTINUE
|
|
1176
|
+
LR = KR-JR
|
|
1177
|
+
CALL COSGEN (JR,1,0.5,0.0,TCOS)
|
|
1178
|
+
DO 221 J=JSTART,JSTOP,JSTEP
|
|
1179
|
+
JM2 = J-JR
|
|
1180
|
+
JP2 = J+JR
|
|
1181
|
+
IF (J .NE. JR) GO TO 213
|
|
1182
|
+
DO 212 I=1,MR
|
|
1183
|
+
B(I) = Q(I,J)+Q(I,JP2)
|
|
1184
|
+
212 CONTINUE
|
|
1185
|
+
GO TO 215
|
|
1186
|
+
213 CONTINUE
|
|
1187
|
+
DO 214 I=1,MR
|
|
1188
|
+
B(I) = Q(I,J)+Q(I,JM2)+Q(I,JP2)
|
|
1189
|
+
214 CONTINUE
|
|
1190
|
+
215 CONTINUE
|
|
1191
|
+
IF (JR .NE. 1) GO TO 217
|
|
1192
|
+
DO 216 I=1,MR
|
|
1193
|
+
Q(I,J) = 0.
|
|
1194
|
+
216 CONTINUE
|
|
1195
|
+
GO TO 219
|
|
1196
|
+
217 CONTINUE
|
|
1197
|
+
JM1 = J-I2R
|
|
1198
|
+
JP1 = J+I2R
|
|
1199
|
+
DO 218 I=1,MR
|
|
1200
|
+
Q(I,J) = .5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
|
|
1201
|
+
218 CONTINUE
|
|
1202
|
+
219 CONTINUE
|
|
1203
|
+
CALL TRIX (JR,0,MR,A,BB,C,B,TCOS,D,W)
|
|
1204
|
+
DO 220 I=1,MR
|
|
1205
|
+
Q(I,J) = Q(I,J)+B(I)
|
|
1206
|
+
220 CONTINUE
|
|
1207
|
+
221 CONTINUE
|
|
1208
|
+
NROD = 1
|
|
1209
|
+
IF (NLAST+I2R .LE. N) NROD = 0
|
|
1210
|
+
IF (NLASTP .NE. NLAST) GO TO 194
|
|
1211
|
+
GO TO 206
|
|
1212
|
+
222 CONTINUE
|
|
1213
|
+
C
|
|
1214
|
+
C RETURN STORAGE REQUIREMENTS FOR P VECTORS.
|
|
1215
|
+
C
|
|
1216
|
+
W(1) = IPSTOR
|
|
1217
|
+
RETURN
|
|
1218
|
+
END
|
|
1219
|
+
SUBROUTINE POISP2 (M,N,A,BB,C,Q,IDIMQ,B,B2,B3,W,W2,W3,D,TCOS,P)
|
|
1220
|
+
C
|
|
1221
|
+
C SUBROUTINE TO SOLVE POISSON EQUATION WITH PERIODIC BOUNDARY
|
|
1222
|
+
C CONDITIONS.
|
|
1223
|
+
C
|
|
1224
|
+
DIMENSION A(*) ,BB(*) ,C(*) ,Q(IDIMQ,1) ,
|
|
1225
|
+
1 B(*) ,B2(*) ,B3(*) ,W(*) ,
|
|
1226
|
+
2 W2(*) ,W3(*) ,D(*) ,TCOS(*) ,
|
|
1227
|
+
3 P(*)
|
|
1228
|
+
MR = M
|
|
1229
|
+
NR = (N+1)/2
|
|
1230
|
+
NRM1 = NR-1
|
|
1231
|
+
IF (2*NR .NE. N) GO TO 107
|
|
1232
|
+
C
|
|
1233
|
+
C EVEN NUMBER OF UNKNOWNS
|
|
1234
|
+
C
|
|
1235
|
+
DO 102 J=1,NRM1
|
|
1236
|
+
NRMJ = NR-J
|
|
1237
|
+
NRPJ = NR+J
|
|
1238
|
+
DO 101 I=1,MR
|
|
1239
|
+
S = Q(I,NRMJ)-Q(I,NRPJ)
|
|
1240
|
+
T = Q(I,NRMJ)+Q(I,NRPJ)
|
|
1241
|
+
Q(I,NRMJ) = S
|
|
1242
|
+
Q(I,NRPJ) = T
|
|
1243
|
+
101 CONTINUE
|
|
1244
|
+
102 CONTINUE
|
|
1245
|
+
DO 103 I=1,MR
|
|
1246
|
+
Q(I,NR) = 2.*Q(I,NR)
|
|
1247
|
+
Q(I,N) = 2.*Q(I,N)
|
|
1248
|
+
103 CONTINUE
|
|
1249
|
+
CALL POISD2 (MR,NRM1,1,A,BB,C,Q,IDIMQ,B,W,D,TCOS,P)
|
|
1250
|
+
IPSTOR = W(1)
|
|
1251
|
+
CALL POISN2 (MR,NR+1,1,1,A,BB,C,Q(1,NR),IDIMQ,B,B2,B3,W,W2,W3,D,
|
|
1252
|
+
1 TCOS,P)
|
|
1253
|
+
IPSTOR = MAX0(IPSTOR,INT(W(1)))
|
|
1254
|
+
DO 105 J=1,NRM1
|
|
1255
|
+
NRMJ = NR-J
|
|
1256
|
+
NRPJ = NR+J
|
|
1257
|
+
DO 104 I=1,MR
|
|
1258
|
+
S = .5*(Q(I,NRPJ)+Q(I,NRMJ))
|
|
1259
|
+
T = .5*(Q(I,NRPJ)-Q(I,NRMJ))
|
|
1260
|
+
Q(I,NRMJ) = S
|
|
1261
|
+
Q(I,NRPJ) = T
|
|
1262
|
+
104 CONTINUE
|
|
1263
|
+
105 CONTINUE
|
|
1264
|
+
DO 106 I=1,MR
|
|
1265
|
+
Q(I,NR) = .5*Q(I,NR)
|
|
1266
|
+
Q(I,N) = .5*Q(I,N)
|
|
1267
|
+
106 CONTINUE
|
|
1268
|
+
GO TO 118
|
|
1269
|
+
107 CONTINUE
|
|
1270
|
+
C
|
|
1271
|
+
C ODD NUMBER OF UNKNOWNS
|
|
1272
|
+
C
|
|
1273
|
+
DO 109 J=1,NRM1
|
|
1274
|
+
NRPJ = N+1-J
|
|
1275
|
+
DO 108 I=1,MR
|
|
1276
|
+
S = Q(I,J)-Q(I,NRPJ)
|
|
1277
|
+
T = Q(I,J)+Q(I,NRPJ)
|
|
1278
|
+
Q(I,J) = S
|
|
1279
|
+
Q(I,NRPJ) = T
|
|
1280
|
+
108 CONTINUE
|
|
1281
|
+
109 CONTINUE
|
|
1282
|
+
DO 110 I=1,MR
|
|
1283
|
+
Q(I,NR) = 2.*Q(I,NR)
|
|
1284
|
+
110 CONTINUE
|
|
1285
|
+
LH = NRM1/2
|
|
1286
|
+
DO 112 J=1,LH
|
|
1287
|
+
NRMJ = NR-J
|
|
1288
|
+
DO 111 I=1,MR
|
|
1289
|
+
S = Q(I,J)
|
|
1290
|
+
Q(I,J) = Q(I,NRMJ)
|
|
1291
|
+
Q(I,NRMJ) = S
|
|
1292
|
+
111 CONTINUE
|
|
1293
|
+
112 CONTINUE
|
|
1294
|
+
CALL POISD2 (MR,NRM1,2,A,BB,C,Q,IDIMQ,B,W,D,TCOS,P)
|
|
1295
|
+
IPSTOR = W(1)
|
|
1296
|
+
CALL POISN2 (MR,NR,2,1,A,BB,C,Q(1,NR),IDIMQ,B,B2,B3,W,W2,W3,D,
|
|
1297
|
+
1 TCOS,P)
|
|
1298
|
+
IPSTOR = MAX0(IPSTOR,INT(W(1)))
|
|
1299
|
+
DO 114 J=1,NRM1
|
|
1300
|
+
NRPJ = NR+J
|
|
1301
|
+
DO 113 I=1,MR
|
|
1302
|
+
S = .5*(Q(I,NRPJ)+Q(I,J))
|
|
1303
|
+
T = .5*(Q(I,NRPJ)-Q(I,J))
|
|
1304
|
+
Q(I,NRPJ) = T
|
|
1305
|
+
Q(I,J) = S
|
|
1306
|
+
113 CONTINUE
|
|
1307
|
+
114 CONTINUE
|
|
1308
|
+
DO 115 I=1,MR
|
|
1309
|
+
Q(I,NR) = .5*Q(I,NR)
|
|
1310
|
+
115 CONTINUE
|
|
1311
|
+
DO 117 J=1,LH
|
|
1312
|
+
NRMJ = NR-J
|
|
1313
|
+
DO 116 I=1,MR
|
|
1314
|
+
S = Q(I,J)
|
|
1315
|
+
Q(I,J) = Q(I,NRMJ)
|
|
1316
|
+
Q(I,NRMJ) = S
|
|
1317
|
+
116 CONTINUE
|
|
1318
|
+
117 CONTINUE
|
|
1319
|
+
118 CONTINUE
|
|
1320
|
+
C
|
|
1321
|
+
C RETURN STORAGE REQUIREMENTS FOR P VECTORS.
|
|
1322
|
+
C
|
|
1323
|
+
W(1) = IPSTOR
|
|
1324
|
+
RETURN
|
|
1325
|
+
C
|
|
1326
|
+
C REVISION HISTORY---
|
|
1327
|
+
C
|
|
1328
|
+
C SEPTEMBER 1973 VERSION 1
|
|
1329
|
+
C APRIL 1976 VERSION 2
|
|
1330
|
+
C JANUARY 1978 VERSION 3
|
|
1331
|
+
C DECEMBER 1979 VERSION 3.1
|
|
1332
|
+
C FEBRUARY 1985 DOCUMENTATION UPGRADE
|
|
1333
|
+
C NOVEMBER 1988 VERSION 3.2, FORTRAN 77 CHANGES
|
|
1334
|
+
C-----------------------------------------------------------------------
|
|
1335
|
+
END
|