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,875 @@
|
|
|
1
|
+
C
|
|
2
|
+
C file poistg.f
|
|
3
|
+
C
|
|
4
|
+
SUBROUTINE POISTG (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 ARGUMENTS W(SEE ARGUMENT LIST)
|
|
40
|
+
C
|
|
41
|
+
C LATEST REVISION NOVEMBER 1988
|
|
42
|
+
C
|
|
43
|
+
C PURPOSE SOLVES THE LINEAR SYSTEM OF EQUATIONS
|
|
44
|
+
C FOR UNKNOWN X VALUES, WHERE I=1,2,...,M
|
|
45
|
+
C AND J=1,2,...,N
|
|
46
|
+
C
|
|
47
|
+
C A(I)*X(I-1,J) + B(I)*X(I,J) + C(I)*X(I+1,J)
|
|
48
|
+
C + X(I,J-1) - 2.*X(I,J) + X(I,J+1)
|
|
49
|
+
C = Y(I,J)
|
|
50
|
+
C
|
|
51
|
+
C THE INDICES I+1 AND I-1 ARE EVALUATED MODULO M,
|
|
52
|
+
C I.E. X(0,J) = X(M,J) AND X(M+1,J) = X(1,J), AND
|
|
53
|
+
C X(I,0) MAY BE EQUAL TO X(I,1) OR -X(I,1), AND
|
|
54
|
+
C X(I,N+1) MAY BE EQUAL TO X(I,N) OR -X(I,N),
|
|
55
|
+
C DEPENDING ON AN INPUT PARAMETER.
|
|
56
|
+
C
|
|
57
|
+
C USAGE CALL POISTG (NPEROD,N,MPEROD,M,A,B,C,IDIMY,Y,
|
|
58
|
+
C IERROR,W)
|
|
59
|
+
C
|
|
60
|
+
C ARGUMENTS
|
|
61
|
+
C
|
|
62
|
+
C ON INPUT
|
|
63
|
+
C
|
|
64
|
+
C NPEROD
|
|
65
|
+
C INDICATES VALUES WHICH X(I,0) AND X(I,N+1)
|
|
66
|
+
C ARE ASSUMED TO HAVE.
|
|
67
|
+
C = 1 IF X(I,0) = -X(I,1) AND X(I,N+1) = -X(I,N
|
|
68
|
+
C = 2 IF X(I,0) = -X(I,1) AND X(I,N+1) = X(I,N
|
|
69
|
+
C = 3 IF X(I,0) = X(I,1) AND X(I,N+1) = X(I,N
|
|
70
|
+
C = 4 IF X(I,0) = X(I,1) AND X(I,N+1) = -X(I,N
|
|
71
|
+
C
|
|
72
|
+
C N
|
|
73
|
+
C THE NUMBER OF UNKNOWNS IN THE J-DIRECTION.
|
|
74
|
+
C N MUST BE GREATER THAN 2.
|
|
75
|
+
C
|
|
76
|
+
C MPEROD
|
|
77
|
+
C = 0 IF A(1) AND C(M) ARE NOT ZERO
|
|
78
|
+
C = 1 IF A(1) = C(M) = 0
|
|
79
|
+
C
|
|
80
|
+
C M
|
|
81
|
+
C THE NUMBER OF UNKNOWNS IN THE I-DIRECTION.
|
|
82
|
+
C M MUST BE GREATER THAN 2.
|
|
83
|
+
C
|
|
84
|
+
C A,B,C
|
|
85
|
+
C ONE-DIMENSIONAL ARRAYS OF LENGTH M THAT
|
|
86
|
+
C SPECIFY THE COEFFICIENTS IN THE LINEAR
|
|
87
|
+
C EQUATIONS GIVEN ABOVE. IF MPEROD = 0 THE
|
|
88
|
+
C ARRAY ELEMENTS MUST NOT DEPEND ON INDEX I,
|
|
89
|
+
C BUT MUST BE CONSTANT. SPECIFICALLY, THE
|
|
90
|
+
C SUBROUTINE CHECKS THE FOLLOWING CONDITION
|
|
91
|
+
C A(I) = C(1)
|
|
92
|
+
C B(I) = B(1)
|
|
93
|
+
C C(I) = C(1)
|
|
94
|
+
C FOR I = 1, 2, ..., M.
|
|
95
|
+
C
|
|
96
|
+
C IDIMY
|
|
97
|
+
C THE ROW (OR FIRST) DIMENSION OF THE TWO-
|
|
98
|
+
C DIMENSIONAL ARRAY Y AS IT APPEARS IN THE
|
|
99
|
+
C PROGRAM CALLING POISTG. THIS PARAMETER IS
|
|
100
|
+
C USED TO SPECIFY THE VARIABLE DIMENSION OF Y.
|
|
101
|
+
C IDIMY MUST BE AT LEAST M.
|
|
102
|
+
C
|
|
103
|
+
C Y
|
|
104
|
+
C A TWO-DIMENSIONAL ARRAY THAT SPECIFIES THE
|
|
105
|
+
C VALUES OF THE RIGHT SIDE OF THE LINEAR SYSTEM
|
|
106
|
+
C OF EQUATIONS GIVEN ABOVE.
|
|
107
|
+
C Y MUST BE DIMENSIONED AT LEAST M X N.
|
|
108
|
+
C
|
|
109
|
+
C W
|
|
110
|
+
C A ONE-DIMENSIONAL WORK ARRAY THAT MUST BE
|
|
111
|
+
C PROVIDED BY THE USER FOR WORK SPACE. W MAY
|
|
112
|
+
C REQUIRE UP TO 9M + 4N + M(INT(LOG2(N)))
|
|
113
|
+
C LOCATIONS. THE ACTUAL NUMBER OF LOCATIONS
|
|
114
|
+
C USED IS COMPUTED BY POISTG AND RETURNED IN
|
|
115
|
+
C LOCATION W(1).
|
|
116
|
+
C
|
|
117
|
+
C ON OUTPUT
|
|
118
|
+
C
|
|
119
|
+
C Y
|
|
120
|
+
C CONTAINS THE SOLUTION X.
|
|
121
|
+
C
|
|
122
|
+
C IERROR
|
|
123
|
+
C AN ERROR FLAG THAT INDICATES INVALID INPUT
|
|
124
|
+
C PARAMETERS. EXCEPT FOR NUMBER ZERO, A
|
|
125
|
+
C SOLUTION IS NOT ATTEMPTED.
|
|
126
|
+
C = 0 NO ERROR
|
|
127
|
+
C = 1 IF M .LE. 2
|
|
128
|
+
C = 2 IF N .LE. 2
|
|
129
|
+
C = 3 IDIMY .LT. M
|
|
130
|
+
C = 4 IF NPEROD .LT. 1 OR NPEROD .GT. 4
|
|
131
|
+
C = 5 IF MPEROD .LT. 0 OR MPEROD .GT. 1
|
|
132
|
+
C = 6 IF MPEROD = 0 AND A(I) .NE. C(1)
|
|
133
|
+
C OR B(I) .NE. B(1) OR C(I) .NE. C(1)
|
|
134
|
+
C FOR SOME I = 1, 2, ..., M.
|
|
135
|
+
C = 7 IF MPEROD .EQ. 1 .AND.
|
|
136
|
+
C (A(1).NE.0 .OR. C(M).NE.0)
|
|
137
|
+
C
|
|
138
|
+
C W
|
|
139
|
+
C W(1) CONTAINS THE REQUIRED LENGTH OF W.
|
|
140
|
+
C
|
|
141
|
+
C
|
|
142
|
+
C I/O NONE
|
|
143
|
+
C
|
|
144
|
+
C PRECISION SINGLE
|
|
145
|
+
C
|
|
146
|
+
C REQUIRED LIBRARY GNBNAUX AND COMF FROM FISHPACK
|
|
147
|
+
C FILES
|
|
148
|
+
C
|
|
149
|
+
C LANGUAGE FORTRAN
|
|
150
|
+
C
|
|
151
|
+
C HISTORY WRITTEN BY ROLAND SWEET AT NCAR IN THE LATE
|
|
152
|
+
C 1970'S. RELEASED ON NCAR'S PUBLIC SOFTWARE
|
|
153
|
+
C LIBRARIES IN JANUARY, 1980.
|
|
154
|
+
C
|
|
155
|
+
C PORTABILITY FORTRAN 77
|
|
156
|
+
C
|
|
157
|
+
C ALGORITHM THIS SUBROUTINE IS AN IMPLEMENTATION OF THE
|
|
158
|
+
C ALGORITHM PRESENTED IN THE REFERENCE BELOW.
|
|
159
|
+
C
|
|
160
|
+
C TIMING FOR LARGE M AND N, THE EXECUTION TIME IS
|
|
161
|
+
C ROUGHLY PROPORTIONAL TO M*N*LOG2(N).
|
|
162
|
+
C
|
|
163
|
+
C ACCURACY TO MEASURE THE ACCURACY OF THE ALGORITHM A
|
|
164
|
+
C UNIFORM RANDOM NUMBER GENERATOR WAS USED TO
|
|
165
|
+
C CREATE A SOLUTION ARRAY X FOR THE SYSTEM GIVEN
|
|
166
|
+
C IN THE 'PURPOSE' SECTION ABOVE, WITH
|
|
167
|
+
C A(I) = C(I) = -0.5*B(I) = 1, I=1,2,...,M
|
|
168
|
+
C AND, WHEN MPEROD = 1
|
|
169
|
+
C A(1) = C(M) = 0
|
|
170
|
+
C B(1) = B(M) =-1.
|
|
171
|
+
C
|
|
172
|
+
C THE SOLUTION X WAS SUBSTITUTED INTO THE GIVEN
|
|
173
|
+
C SYSTEM AND, USING DOUBLE PRECISION, A RIGHT SID
|
|
174
|
+
C Y WAS COMPUTED. USING THIS ARRAY Y SUBROUTINE
|
|
175
|
+
C POISTG WAS CALLED TO PRODUCE AN APPROXIMATE
|
|
176
|
+
C SOLUTION Z. THEN THE RELATIVE ERROR, DEFINED A
|
|
177
|
+
C E = MAX(ABS(Z(I,J)-X(I,J)))/MAX(ABS(X(I,J)))
|
|
178
|
+
C WHERE THE TWO MAXIMA ARE TAKEN OVER I=1,2,...,M
|
|
179
|
+
C AND J=1,2,...,N, WAS COMPUTED. VALUES OF E ARE
|
|
180
|
+
C GIVEN IN THE TABLE BELOW FOR SOME TYPICAL VALUE
|
|
181
|
+
C OF M AND N.
|
|
182
|
+
C
|
|
183
|
+
C M (=N) MPEROD NPEROD E
|
|
184
|
+
C ------ ------ ------ ------
|
|
185
|
+
C
|
|
186
|
+
C 31 0-1 1-4 9.E-13
|
|
187
|
+
C 31 1 1 4.E-13
|
|
188
|
+
C 31 1 3 3.E-13
|
|
189
|
+
C 32 0-1 1-4 3.E-12
|
|
190
|
+
C 32 1 1 3.E-13
|
|
191
|
+
C 32 1 3 1.E-13
|
|
192
|
+
C 33 0-1 1-4 1.E-12
|
|
193
|
+
C 33 1 1 4.E-13
|
|
194
|
+
C 33 1 3 1.E-13
|
|
195
|
+
C 63 0-1 1-4 3.E-12
|
|
196
|
+
C 63 1 1 1.E-12
|
|
197
|
+
C 63 1 3 2.E-13
|
|
198
|
+
C 64 0-1 1-4 4.E-12
|
|
199
|
+
C 64 1 1 1.E-12
|
|
200
|
+
C 64 1 3 6.E-13
|
|
201
|
+
C 65 0-1 1-4 2.E-13
|
|
202
|
+
C 65 1 1 1.E-11
|
|
203
|
+
C 65 1 3 4.E-13
|
|
204
|
+
C
|
|
205
|
+
C REFERENCES SCHUMANN, U. AND R. SWEET,"A DIRECT METHOD
|
|
206
|
+
C FOR THE SOLUTION OF POISSON"S EQUATION WITH
|
|
207
|
+
C NEUMANN BOUNDARY CONDITIONS ON A STAGGERED
|
|
208
|
+
C GRID OF ARBITRARY SIZE," J. COMP. PHYS.
|
|
209
|
+
C 20(1976), PP. 171-182.
|
|
210
|
+
C *********************************************************************
|
|
211
|
+
DIMENSION Y(IDIMY,1)
|
|
212
|
+
DIMENSION W(*) ,B(*) ,A(*) ,C(*)
|
|
213
|
+
C
|
|
214
|
+
IERROR = 0
|
|
215
|
+
IF (M .LE. 2) IERROR = 1
|
|
216
|
+
IF (N .LE. 2) IERROR = 2
|
|
217
|
+
IF (IDIMY .LT. M) IERROR = 3
|
|
218
|
+
IF (NPEROD.LT.1 .OR. NPEROD.GT.4) IERROR = 4
|
|
219
|
+
IF (MPEROD.LT.0 .OR. MPEROD.GT.1) IERROR = 5
|
|
220
|
+
IF (MPEROD .EQ. 1) GO TO 103
|
|
221
|
+
DO 101 I=1,M
|
|
222
|
+
IF (A(I) .NE. C(1)) GO TO 102
|
|
223
|
+
IF (C(I) .NE. C(1)) GO TO 102
|
|
224
|
+
IF (B(I) .NE. B(1)) GO TO 102
|
|
225
|
+
101 CONTINUE
|
|
226
|
+
GO TO 104
|
|
227
|
+
102 IERROR = 6
|
|
228
|
+
RETURN
|
|
229
|
+
103 IF (A(1).NE.0. .OR. C(M).NE.0.) IERROR = 7
|
|
230
|
+
104 IF (IERROR .NE. 0) RETURN
|
|
231
|
+
IWBA = M+1
|
|
232
|
+
IWBB = IWBA+M
|
|
233
|
+
IWBC = IWBB+M
|
|
234
|
+
IWB2 = IWBC+M
|
|
235
|
+
IWB3 = IWB2+M
|
|
236
|
+
IWW1 = IWB3+M
|
|
237
|
+
IWW2 = IWW1+M
|
|
238
|
+
IWW3 = IWW2+M
|
|
239
|
+
IWD = IWW3+M
|
|
240
|
+
IWTCOS = IWD+M
|
|
241
|
+
IWP = IWTCOS+4*N
|
|
242
|
+
DO 106 I=1,M
|
|
243
|
+
K = IWBA+I-1
|
|
244
|
+
W(K) = -A(I)
|
|
245
|
+
K = IWBC+I-1
|
|
246
|
+
W(K) = -C(I)
|
|
247
|
+
K = IWBB+I-1
|
|
248
|
+
W(K) = 2.-B(I)
|
|
249
|
+
DO 105 J=1,N
|
|
250
|
+
Y(I,J) = -Y(I,J)
|
|
251
|
+
105 CONTINUE
|
|
252
|
+
106 CONTINUE
|
|
253
|
+
NP = NPEROD
|
|
254
|
+
MP = MPEROD+1
|
|
255
|
+
GO TO (110,107),MP
|
|
256
|
+
107 CONTINUE
|
|
257
|
+
GO TO (108,108,108,119),NPEROD
|
|
258
|
+
108 CONTINUE
|
|
259
|
+
CALL POSTG2 (NP,N,M,W(IWBA),W(IWBB),W(IWBC),IDIMY,Y,W,W(IWB2),
|
|
260
|
+
1 W(IWB3),W(IWW1),W(IWW2),W(IWW3),W(IWD),W(IWTCOS),
|
|
261
|
+
2 W(IWP))
|
|
262
|
+
IPSTOR = W(IWW1)
|
|
263
|
+
IREV = 2
|
|
264
|
+
IF (NPEROD .EQ. 4) GO TO 120
|
|
265
|
+
109 CONTINUE
|
|
266
|
+
GO TO (123,129),MP
|
|
267
|
+
110 CONTINUE
|
|
268
|
+
C
|
|
269
|
+
C REORDER UNKNOWNS WHEN MP =0
|
|
270
|
+
C
|
|
271
|
+
MH = (M+1)/2
|
|
272
|
+
MHM1 = MH-1
|
|
273
|
+
MODD = 1
|
|
274
|
+
IF (MH*2 .EQ. M) MODD = 2
|
|
275
|
+
DO 115 J=1,N
|
|
276
|
+
DO 111 I=1,MHM1
|
|
277
|
+
MHPI = MH+I
|
|
278
|
+
MHMI = MH-I
|
|
279
|
+
W(I) = Y(MHMI,J)-Y(MHPI,J)
|
|
280
|
+
W(MHPI) = Y(MHMI,J)+Y(MHPI,J)
|
|
281
|
+
111 CONTINUE
|
|
282
|
+
W(MH) = 2.*Y(MH,J)
|
|
283
|
+
GO TO (113,112),MODD
|
|
284
|
+
112 W(M) = 2.*Y(M,J)
|
|
285
|
+
113 CONTINUE
|
|
286
|
+
DO 114 I=1,M
|
|
287
|
+
Y(I,J) = W(I)
|
|
288
|
+
114 CONTINUE
|
|
289
|
+
115 CONTINUE
|
|
290
|
+
K = IWBC+MHM1-1
|
|
291
|
+
I = IWBA+MHM1
|
|
292
|
+
W(K) = 0.
|
|
293
|
+
W(I) = 0.
|
|
294
|
+
W(K+1) = 2.*W(K+1)
|
|
295
|
+
GO TO (116,117),MODD
|
|
296
|
+
116 CONTINUE
|
|
297
|
+
K = IWBB+MHM1-1
|
|
298
|
+
W(K) = W(K)-W(I-1)
|
|
299
|
+
W(IWBC-1) = W(IWBC-1)+W(IWBB-1)
|
|
300
|
+
GO TO 118
|
|
301
|
+
117 W(IWBB-1) = W(K+1)
|
|
302
|
+
118 CONTINUE
|
|
303
|
+
GO TO 107
|
|
304
|
+
119 CONTINUE
|
|
305
|
+
C
|
|
306
|
+
C REVERSE COLUMNS WHEN NPEROD = 4.
|
|
307
|
+
C
|
|
308
|
+
IREV = 1
|
|
309
|
+
NBY2 = N/2
|
|
310
|
+
NP = 2
|
|
311
|
+
120 DO 122 J=1,NBY2
|
|
312
|
+
MSKIP = N+1-J
|
|
313
|
+
DO 121 I=1,M
|
|
314
|
+
A1 = Y(I,J)
|
|
315
|
+
Y(I,J) = Y(I,MSKIP)
|
|
316
|
+
Y(I,MSKIP) = A1
|
|
317
|
+
121 CONTINUE
|
|
318
|
+
122 CONTINUE
|
|
319
|
+
GO TO (108,109),IREV
|
|
320
|
+
123 CONTINUE
|
|
321
|
+
DO 128 J=1,N
|
|
322
|
+
DO 124 I=1,MHM1
|
|
323
|
+
MHMI = MH-I
|
|
324
|
+
MHPI = MH+I
|
|
325
|
+
W(MHMI) = .5*(Y(MHPI,J)+Y(I,J))
|
|
326
|
+
W(MHPI) = .5*(Y(MHPI,J)-Y(I,J))
|
|
327
|
+
124 CONTINUE
|
|
328
|
+
W(MH) = .5*Y(MH,J)
|
|
329
|
+
GO TO (126,125),MODD
|
|
330
|
+
125 W(M) = .5*Y(M,J)
|
|
331
|
+
126 CONTINUE
|
|
332
|
+
DO 127 I=1,M
|
|
333
|
+
Y(I,J) = W(I)
|
|
334
|
+
127 CONTINUE
|
|
335
|
+
128 CONTINUE
|
|
336
|
+
129 CONTINUE
|
|
337
|
+
C
|
|
338
|
+
C RETURN STORAGE REQUIREMENTS FOR W ARRAY.
|
|
339
|
+
C
|
|
340
|
+
W(1) = IPSTOR+IWP-1
|
|
341
|
+
RETURN
|
|
342
|
+
END
|
|
343
|
+
SUBROUTINE POSTG2 (NPEROD,N,M,A,BB,C,IDIMQ,Q,B,B2,B3,W,W2,W3,D,
|
|
344
|
+
1 TCOS,P)
|
|
345
|
+
C
|
|
346
|
+
C SUBROUTINE TO SOLVE POISSON'S EQUATION ON A STAGGERED GRID.
|
|
347
|
+
C
|
|
348
|
+
C
|
|
349
|
+
DIMENSION A(*) ,BB(*) ,C(*) ,Q(IDIMQ,*) ,
|
|
350
|
+
1 B(*) ,B2(*) ,B3(*) ,W(*) ,
|
|
351
|
+
2 W2(*) ,W3(*) ,D(*) ,TCOS(*) ,
|
|
352
|
+
3 K(4) ,P(*)
|
|
353
|
+
EQUIVALENCE (K(1),K1) ,(K(2),K2) ,(K(3),K3) ,(K(4),K4)
|
|
354
|
+
NP = NPEROD
|
|
355
|
+
FNUM = 0.5*FLOAT(NP/3)
|
|
356
|
+
FNUM2 = 0.5*FLOAT(NP/2)
|
|
357
|
+
MR = M
|
|
358
|
+
IP = -MR
|
|
359
|
+
IPSTOR = 0
|
|
360
|
+
I2R = 1
|
|
361
|
+
JR = 2
|
|
362
|
+
NR = N
|
|
363
|
+
NLAST = N
|
|
364
|
+
KR = 1
|
|
365
|
+
LR = 0
|
|
366
|
+
IF (NR .LE. 3) GO TO 142
|
|
367
|
+
101 CONTINUE
|
|
368
|
+
JR = 2*I2R
|
|
369
|
+
NROD = 1
|
|
370
|
+
IF ((NR/2)*2 .EQ. NR) NROD = 0
|
|
371
|
+
JSTART = 1
|
|
372
|
+
JSTOP = NLAST-JR
|
|
373
|
+
IF (NROD .EQ. 0) JSTOP = JSTOP-I2R
|
|
374
|
+
I2RBY2 = I2R/2
|
|
375
|
+
IF (JSTOP .GE. JSTART) GO TO 102
|
|
376
|
+
J = JR
|
|
377
|
+
GO TO 115
|
|
378
|
+
102 CONTINUE
|
|
379
|
+
C
|
|
380
|
+
C REGULAR REDUCTION.
|
|
381
|
+
C
|
|
382
|
+
IJUMP = 1
|
|
383
|
+
DO 114 J=JSTART,JSTOP,JR
|
|
384
|
+
JP1 = J+I2RBY2
|
|
385
|
+
JP2 = J+I2R
|
|
386
|
+
JP3 = JP2+I2RBY2
|
|
387
|
+
JM1 = J-I2RBY2
|
|
388
|
+
JM2 = J-I2R
|
|
389
|
+
JM3 = JM2-I2RBY2
|
|
390
|
+
IF (J .NE. 1) GO TO 106
|
|
391
|
+
CALL COSGEN (I2R,1,FNUM,0.5,TCOS)
|
|
392
|
+
IF (I2R .NE. 1) GO TO 104
|
|
393
|
+
DO 103 I=1,MR
|
|
394
|
+
B(I) = Q(I,1)
|
|
395
|
+
Q(I,1) = Q(I,2)
|
|
396
|
+
103 CONTINUE
|
|
397
|
+
GO TO 112
|
|
398
|
+
104 DO 105 I=1,MR
|
|
399
|
+
B(I) = Q(I,1)+0.5*(Q(I,JP2)-Q(I,JP1)-Q(I,JP3))
|
|
400
|
+
Q(I,1) = Q(I,JP2)+Q(I,1)-Q(I,JP1)
|
|
401
|
+
105 CONTINUE
|
|
402
|
+
GO TO 112
|
|
403
|
+
106 CONTINUE
|
|
404
|
+
GO TO (107,108),IJUMP
|
|
405
|
+
107 CONTINUE
|
|
406
|
+
IJUMP = 2
|
|
407
|
+
CALL COSGEN (I2R,1,0.5,0.0,TCOS)
|
|
408
|
+
108 CONTINUE
|
|
409
|
+
IF (I2R .NE. 1) GO TO 110
|
|
410
|
+
DO 109 I=1,MR
|
|
411
|
+
B(I) = 2.*Q(I,J)
|
|
412
|
+
Q(I,J) = Q(I,JM2)+Q(I,JP2)
|
|
413
|
+
109 CONTINUE
|
|
414
|
+
GO TO 112
|
|
415
|
+
110 DO 111 I=1,MR
|
|
416
|
+
FI = Q(I,J)
|
|
417
|
+
Q(I,J) = Q(I,J)-Q(I,JM1)-Q(I,JP1)+Q(I,JM2)+Q(I,JP2)
|
|
418
|
+
B(I) = FI+Q(I,J)-Q(I,JM3)-Q(I,JP3)
|
|
419
|
+
111 CONTINUE
|
|
420
|
+
112 CONTINUE
|
|
421
|
+
CALL TRIX (I2R,0,MR,A,BB,C,B,TCOS,D,W)
|
|
422
|
+
DO 113 I=1,MR
|
|
423
|
+
Q(I,J) = Q(I,J)+B(I)
|
|
424
|
+
113 CONTINUE
|
|
425
|
+
C
|
|
426
|
+
C END OF REDUCTION FOR REGULAR UNKNOWNS.
|
|
427
|
+
C
|
|
428
|
+
114 CONTINUE
|
|
429
|
+
C
|
|
430
|
+
C BEGIN SPECIAL REDUCTION FOR LAST UNKNOWN.
|
|
431
|
+
C
|
|
432
|
+
J = JSTOP+JR
|
|
433
|
+
115 NLAST = J
|
|
434
|
+
JM1 = J-I2RBY2
|
|
435
|
+
JM2 = J-I2R
|
|
436
|
+
JM3 = JM2-I2RBY2
|
|
437
|
+
IF (NROD .EQ. 0) GO TO 125
|
|
438
|
+
C
|
|
439
|
+
C ODD NUMBER OF UNKNOWNS
|
|
440
|
+
C
|
|
441
|
+
IF (I2R .NE. 1) GO TO 117
|
|
442
|
+
DO 116 I=1,MR
|
|
443
|
+
B(I) = Q(I,J)
|
|
444
|
+
Q(I,J) = Q(I,JM2)
|
|
445
|
+
116 CONTINUE
|
|
446
|
+
GO TO 123
|
|
447
|
+
117 DO 118 I=1,MR
|
|
448
|
+
B(I) = Q(I,J)+.5*(Q(I,JM2)-Q(I,JM1)-Q(I,JM3))
|
|
449
|
+
118 CONTINUE
|
|
450
|
+
IF (NRODPR .NE. 0) GO TO 120
|
|
451
|
+
DO 119 I=1,MR
|
|
452
|
+
II = IP+I
|
|
453
|
+
Q(I,J) = Q(I,JM2)+P(II)
|
|
454
|
+
119 CONTINUE
|
|
455
|
+
IP = IP-MR
|
|
456
|
+
GO TO 122
|
|
457
|
+
120 CONTINUE
|
|
458
|
+
DO 121 I=1,MR
|
|
459
|
+
Q(I,J) = Q(I,J)-Q(I,JM1)+Q(I,JM2)
|
|
460
|
+
121 CONTINUE
|
|
461
|
+
122 IF (LR .EQ. 0) GO TO 123
|
|
462
|
+
CALL COSGEN (LR,1,FNUM2,0.5,TCOS(KR+1))
|
|
463
|
+
123 CONTINUE
|
|
464
|
+
CALL COSGEN (KR,1,FNUM2,0.5,TCOS)
|
|
465
|
+
CALL TRIX (KR,LR,MR,A,BB,C,B,TCOS,D,W)
|
|
466
|
+
DO 124 I=1,MR
|
|
467
|
+
Q(I,J) = Q(I,J)+B(I)
|
|
468
|
+
124 CONTINUE
|
|
469
|
+
KR = KR+I2R
|
|
470
|
+
GO TO 141
|
|
471
|
+
125 CONTINUE
|
|
472
|
+
C
|
|
473
|
+
C EVEN NUMBER OF UNKNOWNS
|
|
474
|
+
C
|
|
475
|
+
JP1 = J+I2RBY2
|
|
476
|
+
JP2 = J+I2R
|
|
477
|
+
IF (I2R .NE. 1) GO TO 129
|
|
478
|
+
DO 126 I=1,MR
|
|
479
|
+
B(I) = Q(I,J)
|
|
480
|
+
126 CONTINUE
|
|
481
|
+
TCOS(1) = 0.
|
|
482
|
+
CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
|
|
483
|
+
IP = 0
|
|
484
|
+
IPSTOR = MR
|
|
485
|
+
DO 127 I=1,MR
|
|
486
|
+
P(I) = B(I)
|
|
487
|
+
B(I) = B(I)+Q(I,N)
|
|
488
|
+
127 CONTINUE
|
|
489
|
+
TCOS(1) = -1.+2.*FLOAT(NP/2)
|
|
490
|
+
TCOS(2) = 0.
|
|
491
|
+
CALL TRIX (1,1,MR,A,BB,C,B,TCOS,D,W)
|
|
492
|
+
DO 128 I=1,MR
|
|
493
|
+
Q(I,J) = Q(I,JM2)+P(I)+B(I)
|
|
494
|
+
128 CONTINUE
|
|
495
|
+
GO TO 140
|
|
496
|
+
129 CONTINUE
|
|
497
|
+
DO 130 I=1,MR
|
|
498
|
+
B(I) = Q(I,J)+.5*(Q(I,JM2)-Q(I,JM1)-Q(I,JM3))
|
|
499
|
+
130 CONTINUE
|
|
500
|
+
IF (NRODPR .NE. 0) GO TO 132
|
|
501
|
+
DO 131 I=1,MR
|
|
502
|
+
II = IP+I
|
|
503
|
+
B(I) = B(I)+P(II)
|
|
504
|
+
131 CONTINUE
|
|
505
|
+
GO TO 134
|
|
506
|
+
132 CONTINUE
|
|
507
|
+
DO 133 I=1,MR
|
|
508
|
+
B(I) = B(I)+Q(I,JP2)-Q(I,JP1)
|
|
509
|
+
133 CONTINUE
|
|
510
|
+
134 CONTINUE
|
|
511
|
+
CALL COSGEN (I2R,1,0.5,0.0,TCOS)
|
|
512
|
+
CALL TRIX (I2R,0,MR,A,BB,C,B,TCOS,D,W)
|
|
513
|
+
IP = IP+MR
|
|
514
|
+
IPSTOR = MAX0(IPSTOR,IP+MR)
|
|
515
|
+
DO 135 I=1,MR
|
|
516
|
+
II = IP+I
|
|
517
|
+
P(II) = B(I)+.5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
|
|
518
|
+
B(I) = P(II)+Q(I,JP2)
|
|
519
|
+
135 CONTINUE
|
|
520
|
+
IF (LR .EQ. 0) GO TO 136
|
|
521
|
+
CALL COSGEN (LR,1,FNUM2,0.5,TCOS(I2R+1))
|
|
522
|
+
CALL MERGE (TCOS,0,I2R,I2R,LR,KR)
|
|
523
|
+
GO TO 138
|
|
524
|
+
136 DO 137 I=1,I2R
|
|
525
|
+
II = KR+I
|
|
526
|
+
TCOS(II) = TCOS(I)
|
|
527
|
+
137 CONTINUE
|
|
528
|
+
138 CALL COSGEN (KR,1,FNUM2,0.5,TCOS)
|
|
529
|
+
CALL TRIX (KR,KR,MR,A,BB,C,B,TCOS,D,W)
|
|
530
|
+
DO 139 I=1,MR
|
|
531
|
+
II = IP+I
|
|
532
|
+
Q(I,J) = Q(I,JM2)+P(II)+B(I)
|
|
533
|
+
139 CONTINUE
|
|
534
|
+
140 CONTINUE
|
|
535
|
+
LR = KR
|
|
536
|
+
KR = KR+JR
|
|
537
|
+
141 CONTINUE
|
|
538
|
+
NR = (NLAST-1)/JR+1
|
|
539
|
+
IF (NR .LE. 3) GO TO 142
|
|
540
|
+
I2R = JR
|
|
541
|
+
NRODPR = NROD
|
|
542
|
+
GO TO 101
|
|
543
|
+
142 CONTINUE
|
|
544
|
+
C
|
|
545
|
+
C BEGIN SOLUTION
|
|
546
|
+
C
|
|
547
|
+
J = 1+JR
|
|
548
|
+
JM1 = J-I2R
|
|
549
|
+
JP1 = J+I2R
|
|
550
|
+
JM2 = NLAST-I2R
|
|
551
|
+
IF (NR .EQ. 2) GO TO 180
|
|
552
|
+
IF (LR .NE. 0) GO TO 167
|
|
553
|
+
IF (N .NE. 3) GO TO 156
|
|
554
|
+
C
|
|
555
|
+
C CASE N = 3.
|
|
556
|
+
C
|
|
557
|
+
GO TO (143,148,143),NP
|
|
558
|
+
143 DO 144 I=1,MR
|
|
559
|
+
B(I) = Q(I,2)
|
|
560
|
+
B2(I) = Q(I,1)+Q(I,3)
|
|
561
|
+
B3(I) = 0.
|
|
562
|
+
144 CONTINUE
|
|
563
|
+
GO TO (146,146,145),NP
|
|
564
|
+
145 TCOS(1) = -1.
|
|
565
|
+
TCOS(2) = 1.
|
|
566
|
+
K1 = 1
|
|
567
|
+
GO TO 147
|
|
568
|
+
146 TCOS(1) = -2.
|
|
569
|
+
TCOS(2) = 1.
|
|
570
|
+
TCOS(3) = -1.
|
|
571
|
+
K1 = 2
|
|
572
|
+
147 K2 = 1
|
|
573
|
+
K3 = 0
|
|
574
|
+
K4 = 0
|
|
575
|
+
GO TO 150
|
|
576
|
+
148 DO 149 I=1,MR
|
|
577
|
+
B(I) = Q(I,2)
|
|
578
|
+
B2(I) = Q(I,3)
|
|
579
|
+
B3(I) = Q(I,1)
|
|
580
|
+
149 CONTINUE
|
|
581
|
+
CALL COSGEN (3,1,0.5,0.0,TCOS)
|
|
582
|
+
TCOS(4) = -1.
|
|
583
|
+
TCOS(5) = 1.
|
|
584
|
+
TCOS(6) = -1.
|
|
585
|
+
TCOS(7) = 1.
|
|
586
|
+
K1 = 3
|
|
587
|
+
K2 = 2
|
|
588
|
+
K3 = 1
|
|
589
|
+
K4 = 1
|
|
590
|
+
150 CALL TRI3 (MR,A,BB,C,K,B,B2,B3,TCOS,D,W,W2,W3)
|
|
591
|
+
DO 151 I=1,MR
|
|
592
|
+
B(I) = B(I)+B2(I)+B3(I)
|
|
593
|
+
151 CONTINUE
|
|
594
|
+
GO TO (153,153,152),NP
|
|
595
|
+
152 TCOS(1) = 2.
|
|
596
|
+
CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
|
|
597
|
+
153 DO 154 I=1,MR
|
|
598
|
+
Q(I,2) = B(I)
|
|
599
|
+
B(I) = Q(I,1)+B(I)
|
|
600
|
+
154 CONTINUE
|
|
601
|
+
TCOS(1) = -1.+4.*FNUM
|
|
602
|
+
CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
|
|
603
|
+
DO 155 I=1,MR
|
|
604
|
+
Q(I,1) = B(I)
|
|
605
|
+
155 CONTINUE
|
|
606
|
+
JR = 1
|
|
607
|
+
I2R = 0
|
|
608
|
+
GO TO 188
|
|
609
|
+
C
|
|
610
|
+
C CASE N = 2**P+1
|
|
611
|
+
C
|
|
612
|
+
156 CONTINUE
|
|
613
|
+
DO 157 I=1,MR
|
|
614
|
+
B(I) = Q(I,J)+Q(I,1)-Q(I,JM1)+Q(I,NLAST)-Q(I,JM2)
|
|
615
|
+
157 CONTINUE
|
|
616
|
+
GO TO (158,160,158),NP
|
|
617
|
+
158 DO 159 I=1,MR
|
|
618
|
+
B2(I) = Q(I,1)+Q(I,NLAST)+Q(I,J)-Q(I,JM1)-Q(I,JP1)
|
|
619
|
+
B3(I) = 0.
|
|
620
|
+
159 CONTINUE
|
|
621
|
+
K1 = NLAST-1
|
|
622
|
+
K2 = NLAST+JR-1
|
|
623
|
+
CALL COSGEN (JR-1,1,0.0,1.0,TCOS(NLAST))
|
|
624
|
+
TCOS(K2) = 2.*FLOAT(NP-2)
|
|
625
|
+
CALL COSGEN (JR,1,0.5-FNUM,0.5,TCOS(K2+1))
|
|
626
|
+
K3 = (3-NP)/2
|
|
627
|
+
CALL MERGE (TCOS,K1,JR-K3,K2-K3,JR+K3,0)
|
|
628
|
+
K1 = K1-1+K3
|
|
629
|
+
CALL COSGEN (JR,1,FNUM,0.5,TCOS(K1+1))
|
|
630
|
+
K2 = JR
|
|
631
|
+
K3 = 0
|
|
632
|
+
K4 = 0
|
|
633
|
+
GO TO 162
|
|
634
|
+
160 DO 161 I=1,MR
|
|
635
|
+
FI = (Q(I,J)-Q(I,JM1)-Q(I,JP1))/2.
|
|
636
|
+
B2(I) = Q(I,1)+FI
|
|
637
|
+
B3(I) = Q(I,NLAST)+FI
|
|
638
|
+
161 CONTINUE
|
|
639
|
+
K1 = NLAST+JR-1
|
|
640
|
+
K2 = K1+JR-1
|
|
641
|
+
CALL COSGEN (JR-1,1,0.0,1.0,TCOS(K1+1))
|
|
642
|
+
CALL COSGEN (NLAST,1,0.5,0.0,TCOS(K2+1))
|
|
643
|
+
CALL MERGE (TCOS,K1,JR-1,K2,NLAST,0)
|
|
644
|
+
K3 = K1+NLAST-1
|
|
645
|
+
K4 = K3+JR
|
|
646
|
+
CALL COSGEN (JR,1,0.5,0.5,TCOS(K3+1))
|
|
647
|
+
CALL COSGEN (JR,1,0.0,0.5,TCOS(K4+1))
|
|
648
|
+
CALL MERGE (TCOS,K3,JR,K4,JR,K1)
|
|
649
|
+
K2 = NLAST-1
|
|
650
|
+
K3 = JR
|
|
651
|
+
K4 = JR
|
|
652
|
+
162 CALL TRI3 (MR,A,BB,C,K,B,B2,B3,TCOS,D,W,W2,W3)
|
|
653
|
+
DO 163 I=1,MR
|
|
654
|
+
B(I) = B(I)+B2(I)+B3(I)
|
|
655
|
+
163 CONTINUE
|
|
656
|
+
IF (NP .NE. 3) GO TO 164
|
|
657
|
+
TCOS(1) = 2.
|
|
658
|
+
CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
|
|
659
|
+
164 DO 165 I=1,MR
|
|
660
|
+
Q(I,J) = B(I)+.5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
|
|
661
|
+
B(I) = Q(I,J)+Q(I,1)
|
|
662
|
+
165 CONTINUE
|
|
663
|
+
CALL COSGEN (JR,1,FNUM,0.5,TCOS)
|
|
664
|
+
CALL TRIX (JR,0,MR,A,BB,C,B,TCOS,D,W)
|
|
665
|
+
DO 166 I=1,MR
|
|
666
|
+
Q(I,1) = Q(I,1)-Q(I,JM1)+B(I)
|
|
667
|
+
166 CONTINUE
|
|
668
|
+
GO TO 188
|
|
669
|
+
C
|
|
670
|
+
C CASE OF GENERAL N WITH NR = 3 .
|
|
671
|
+
C
|
|
672
|
+
167 CONTINUE
|
|
673
|
+
DO 168 I=1,MR
|
|
674
|
+
B(I) = Q(I,1)-Q(I,JM1)+Q(I,J)
|
|
675
|
+
168 CONTINUE
|
|
676
|
+
IF (NROD .NE. 0) GO TO 170
|
|
677
|
+
DO 169 I=1,MR
|
|
678
|
+
II = IP+I
|
|
679
|
+
B(I) = B(I)+P(II)
|
|
680
|
+
169 CONTINUE
|
|
681
|
+
GO TO 172
|
|
682
|
+
170 DO 171 I=1,MR
|
|
683
|
+
B(I) = B(I)+Q(I,NLAST)-Q(I,JM2)
|
|
684
|
+
171 CONTINUE
|
|
685
|
+
172 CONTINUE
|
|
686
|
+
DO 173 I=1,MR
|
|
687
|
+
T = .5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
|
|
688
|
+
Q(I,J) = T
|
|
689
|
+
B2(I) = Q(I,NLAST)+T
|
|
690
|
+
B3(I) = Q(I,1)+T
|
|
691
|
+
173 CONTINUE
|
|
692
|
+
K1 = KR+2*JR
|
|
693
|
+
CALL COSGEN (JR-1,1,0.0,1.0,TCOS(K1+1))
|
|
694
|
+
K2 = K1+JR
|
|
695
|
+
TCOS(K2) = 2.*FLOAT(NP-2)
|
|
696
|
+
K4 = (NP-1)*(3-NP)
|
|
697
|
+
K3 = K2+1-K4
|
|
698
|
+
CALL COSGEN (KR+JR+K4,1,FLOAT(K4)/2.,1.-FLOAT(K4),TCOS(K3))
|
|
699
|
+
K4 = 1-NP/3
|
|
700
|
+
CALL MERGE (TCOS,K1,JR-K4,K2-K4,KR+JR+K4,0)
|
|
701
|
+
IF (NP .EQ. 3) K1 = K1-1
|
|
702
|
+
K2 = KR+JR
|
|
703
|
+
K4 = K1+K2
|
|
704
|
+
CALL COSGEN (KR,1,FNUM2,0.5,TCOS(K4+1))
|
|
705
|
+
K3 = K4+KR
|
|
706
|
+
CALL COSGEN (JR,1,FNUM,0.5,TCOS(K3+1))
|
|
707
|
+
CALL MERGE (TCOS,K4,KR,K3,JR,K1)
|
|
708
|
+
K4 = K3+JR
|
|
709
|
+
CALL COSGEN (LR,1,FNUM2,0.5,TCOS(K4+1))
|
|
710
|
+
CALL MERGE (TCOS,K3,JR,K4,LR,K1+K2)
|
|
711
|
+
CALL COSGEN (KR,1,FNUM2,0.5,TCOS(K3+1))
|
|
712
|
+
K3 = KR
|
|
713
|
+
K4 = KR
|
|
714
|
+
CALL TRI3 (MR,A,BB,C,K,B,B2,B3,TCOS,D,W,W2,W3)
|
|
715
|
+
DO 174 I=1,MR
|
|
716
|
+
B(I) = B(I)+B2(I)+B3(I)
|
|
717
|
+
174 CONTINUE
|
|
718
|
+
IF (NP .NE. 3) GO TO 175
|
|
719
|
+
TCOS(1) = 2.
|
|
720
|
+
CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
|
|
721
|
+
175 DO 176 I=1,MR
|
|
722
|
+
Q(I,J) = Q(I,J)+B(I)
|
|
723
|
+
B(I) = Q(I,1)+Q(I,J)
|
|
724
|
+
176 CONTINUE
|
|
725
|
+
CALL COSGEN (JR,1,FNUM,0.5,TCOS)
|
|
726
|
+
CALL TRIX (JR,0,MR,A,BB,C,B,TCOS,D,W)
|
|
727
|
+
IF (JR .NE. 1) GO TO 178
|
|
728
|
+
DO 177 I=1,MR
|
|
729
|
+
Q(I,1) = B(I)
|
|
730
|
+
177 CONTINUE
|
|
731
|
+
GO TO 188
|
|
732
|
+
178 CONTINUE
|
|
733
|
+
DO 179 I=1,MR
|
|
734
|
+
Q(I,1) = Q(I,1)-Q(I,JM1)+B(I)
|
|
735
|
+
179 CONTINUE
|
|
736
|
+
GO TO 188
|
|
737
|
+
180 CONTINUE
|
|
738
|
+
C
|
|
739
|
+
C CASE OF GENERAL N AND NR = 2 .
|
|
740
|
+
C
|
|
741
|
+
DO 181 I=1,MR
|
|
742
|
+
II = IP+I
|
|
743
|
+
B3(I) = 0.
|
|
744
|
+
B(I) = Q(I,1)+P(II)
|
|
745
|
+
Q(I,1) = Q(I,1)-Q(I,JM1)
|
|
746
|
+
B2(I) = Q(I,1)+Q(I,NLAST)
|
|
747
|
+
181 CONTINUE
|
|
748
|
+
K1 = KR+JR
|
|
749
|
+
K2 = K1+JR
|
|
750
|
+
CALL COSGEN (JR-1,1,0.0,1.0,TCOS(K1+1))
|
|
751
|
+
GO TO (182,183,182),NP
|
|
752
|
+
182 TCOS(K2) = 2.*FLOAT(NP-2)
|
|
753
|
+
CALL COSGEN (KR,1,0.0,1.0,TCOS(K2+1))
|
|
754
|
+
GO TO 184
|
|
755
|
+
183 CALL COSGEN (KR+1,1,0.5,0.0,TCOS(K2))
|
|
756
|
+
184 K4 = 1-NP/3
|
|
757
|
+
CALL MERGE (TCOS,K1,JR-K4,K2-K4,KR+K4,0)
|
|
758
|
+
IF (NP .EQ. 3) K1 = K1-1
|
|
759
|
+
K2 = KR
|
|
760
|
+
CALL COSGEN (KR,1,FNUM2,0.5,TCOS(K1+1))
|
|
761
|
+
K4 = K1+KR
|
|
762
|
+
CALL COSGEN (LR,1,FNUM2,0.5,TCOS(K4+1))
|
|
763
|
+
K3 = LR
|
|
764
|
+
K4 = 0
|
|
765
|
+
CALL TRI3 (MR,A,BB,C,K,B,B2,B3,TCOS,D,W,W2,W3)
|
|
766
|
+
DO 185 I=1,MR
|
|
767
|
+
B(I) = B(I)+B2(I)
|
|
768
|
+
185 CONTINUE
|
|
769
|
+
IF (NP .NE. 3) GO TO 186
|
|
770
|
+
TCOS(1) = 2.
|
|
771
|
+
CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
|
|
772
|
+
186 DO 187 I=1,MR
|
|
773
|
+
Q(I,1) = Q(I,1)+B(I)
|
|
774
|
+
187 CONTINUE
|
|
775
|
+
188 CONTINUE
|
|
776
|
+
C
|
|
777
|
+
C START BACK SUBSTITUTION.
|
|
778
|
+
C
|
|
779
|
+
J = NLAST-JR
|
|
780
|
+
DO 189 I=1,MR
|
|
781
|
+
B(I) = Q(I,NLAST)+Q(I,J)
|
|
782
|
+
189 CONTINUE
|
|
783
|
+
JM2 = NLAST-I2R
|
|
784
|
+
IF (JR .NE. 1) GO TO 191
|
|
785
|
+
DO 190 I=1,MR
|
|
786
|
+
Q(I,NLAST) = 0.
|
|
787
|
+
190 CONTINUE
|
|
788
|
+
GO TO 195
|
|
789
|
+
191 CONTINUE
|
|
790
|
+
IF (NROD .NE. 0) GO TO 193
|
|
791
|
+
DO 192 I=1,MR
|
|
792
|
+
II = IP+I
|
|
793
|
+
Q(I,NLAST) = P(II)
|
|
794
|
+
192 CONTINUE
|
|
795
|
+
IP = IP-MR
|
|
796
|
+
GO TO 195
|
|
797
|
+
193 DO 194 I=1,MR
|
|
798
|
+
Q(I,NLAST) = Q(I,NLAST)-Q(I,JM2)
|
|
799
|
+
194 CONTINUE
|
|
800
|
+
195 CONTINUE
|
|
801
|
+
CALL COSGEN (KR,1,FNUM2,0.5,TCOS)
|
|
802
|
+
CALL COSGEN (LR,1,FNUM2,0.5,TCOS(KR+1))
|
|
803
|
+
CALL TRIX (KR,LR,MR,A,BB,C,B,TCOS,D,W)
|
|
804
|
+
DO 196 I=1,MR
|
|
805
|
+
Q(I,NLAST) = Q(I,NLAST)+B(I)
|
|
806
|
+
196 CONTINUE
|
|
807
|
+
NLASTP = NLAST
|
|
808
|
+
197 CONTINUE
|
|
809
|
+
JSTEP = JR
|
|
810
|
+
JR = I2R
|
|
811
|
+
I2R = I2R/2
|
|
812
|
+
IF (JR .EQ. 0) GO TO 210
|
|
813
|
+
JSTART = 1+JR
|
|
814
|
+
KR = KR-JR
|
|
815
|
+
IF (NLAST+JR .GT. N) GO TO 198
|
|
816
|
+
KR = KR-JR
|
|
817
|
+
NLAST = NLAST+JR
|
|
818
|
+
JSTOP = NLAST-JSTEP
|
|
819
|
+
GO TO 199
|
|
820
|
+
198 CONTINUE
|
|
821
|
+
JSTOP = NLAST-JR
|
|
822
|
+
199 CONTINUE
|
|
823
|
+
LR = KR-JR
|
|
824
|
+
CALL COSGEN (JR,1,0.5,0.0,TCOS)
|
|
825
|
+
DO 209 J=JSTART,JSTOP,JSTEP
|
|
826
|
+
JM2 = J-JR
|
|
827
|
+
JP2 = J+JR
|
|
828
|
+
IF (J .NE. JR) GO TO 201
|
|
829
|
+
DO 200 I=1,MR
|
|
830
|
+
B(I) = Q(I,J)+Q(I,JP2)
|
|
831
|
+
200 CONTINUE
|
|
832
|
+
GO TO 203
|
|
833
|
+
201 CONTINUE
|
|
834
|
+
DO 202 I=1,MR
|
|
835
|
+
B(I) = Q(I,J)+Q(I,JM2)+Q(I,JP2)
|
|
836
|
+
202 CONTINUE
|
|
837
|
+
203 CONTINUE
|
|
838
|
+
IF (JR .NE. 1) GO TO 205
|
|
839
|
+
DO 204 I=1,MR
|
|
840
|
+
Q(I,J) = 0.
|
|
841
|
+
204 CONTINUE
|
|
842
|
+
GO TO 207
|
|
843
|
+
205 CONTINUE
|
|
844
|
+
JM1 = J-I2R
|
|
845
|
+
JP1 = J+I2R
|
|
846
|
+
DO 206 I=1,MR
|
|
847
|
+
Q(I,J) = .5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
|
|
848
|
+
206 CONTINUE
|
|
849
|
+
207 CONTINUE
|
|
850
|
+
CALL TRIX (JR,0,MR,A,BB,C,B,TCOS,D,W)
|
|
851
|
+
DO 208 I=1,MR
|
|
852
|
+
Q(I,J) = Q(I,J)+B(I)
|
|
853
|
+
208 CONTINUE
|
|
854
|
+
209 CONTINUE
|
|
855
|
+
NROD = 1
|
|
856
|
+
IF (NLAST+I2R .LE. N) NROD = 0
|
|
857
|
+
IF (NLASTP .NE. NLAST) GO TO 188
|
|
858
|
+
GO TO 197
|
|
859
|
+
210 CONTINUE
|
|
860
|
+
C
|
|
861
|
+
C RETURN STORAGE REQUIREMENTS FOR P VECTORS.
|
|
862
|
+
C
|
|
863
|
+
W(1) = IPSTOR
|
|
864
|
+
RETURN
|
|
865
|
+
C
|
|
866
|
+
C REVISION HISTORY---
|
|
867
|
+
C
|
|
868
|
+
C SEPTEMBER 1973 VERSION 1
|
|
869
|
+
C APRIL 1976 VERSION 2
|
|
870
|
+
C JANUARY 1978 VERSION 3
|
|
871
|
+
C DECEMBER 1979 VERSION 3.1
|
|
872
|
+
C FEBRUARY 1985 DOCUMENTATION UPGRADE
|
|
873
|
+
C NOVEMBER 1988 VERSION 3.2, FORTRAN 77 CHANGES
|
|
874
|
+
C-----------------------------------------------------------------------
|
|
875
|
+
END
|