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,550 @@
|
|
|
1
|
+
C
|
|
2
|
+
C file pois3d.f
|
|
3
|
+
C
|
|
4
|
+
SUBROUTINE POIS3D (LPEROD,L,C1,MPEROD,M,C2,NPEROD,N,A,B,C,LDIMF,
|
|
5
|
+
1 MDIMF,F,IERROR,W)
|
|
6
|
+
C
|
|
7
|
+
C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
8
|
+
C * *
|
|
9
|
+
C * copyright (c) 1999 by UCAR *
|
|
10
|
+
C * *
|
|
11
|
+
C * UNIVERSITY CORPORATION for ATMOSPHERIC RESEARCH *
|
|
12
|
+
C * *
|
|
13
|
+
C * all rights reserved *
|
|
14
|
+
C * *
|
|
15
|
+
C * FISHPACK version 4.1 *
|
|
16
|
+
C * *
|
|
17
|
+
C * A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE SOLUTION OF *
|
|
18
|
+
C * *
|
|
19
|
+
C * SEPARABLE ELLIPTIC PARTIAL DIFFERENTIAL EQUATIONS *
|
|
20
|
+
C * *
|
|
21
|
+
C * BY *
|
|
22
|
+
C * *
|
|
23
|
+
C * JOHN ADAMS, PAUL SWARZTRAUBER AND ROLAND SWEET *
|
|
24
|
+
C * *
|
|
25
|
+
C * OF *
|
|
26
|
+
C * *
|
|
27
|
+
C * THE NATIONAL CENTER FOR ATMOSPHERIC RESEARCH *
|
|
28
|
+
C * *
|
|
29
|
+
C * BOULDER, COLORADO (80307) U.S.A. *
|
|
30
|
+
C * *
|
|
31
|
+
C * WHICH IS SPONSORED BY *
|
|
32
|
+
C * *
|
|
33
|
+
C * THE NATIONAL SCIENCE FOUNDATION *
|
|
34
|
+
C * *
|
|
35
|
+
C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
36
|
+
C
|
|
37
|
+
C
|
|
38
|
+
C
|
|
39
|
+
C DIMENSION OF A(N), B(N), C(N), F(LDIMF,MDIMF,N),
|
|
40
|
+
C ARGUMENTS W(SEE ARGUMENT LIST)
|
|
41
|
+
C
|
|
42
|
+
C LATEST REVISION NOVEMBER 1988
|
|
43
|
+
C
|
|
44
|
+
C PURPOSE SOLVES THE LINEAR SYSTEM OF EQUATIONS
|
|
45
|
+
C FOR UNKNOWN X VALUES, WHERE I=1,2,...,L,
|
|
46
|
+
C J=1,2,...,M, AND K=1,2,...,N
|
|
47
|
+
C
|
|
48
|
+
C C1*(X(I-1,J,K) -2.*X(I,J,K) +X(I+1,J,K)) +
|
|
49
|
+
C C2*(X(I,J-1,K) -2.*X(I,J,K) +X(I,J+1,K)) +
|
|
50
|
+
C A(K)*X(I,J,K-1) +B(K)*X(I,J,K)+ C(K)*X(I,J,K+1)
|
|
51
|
+
C = F(I,J,K)
|
|
52
|
+
C
|
|
53
|
+
C THE INDICES K-1 AND K+1 ARE EVALUATED MODULO N,
|
|
54
|
+
C I.E. X(I,J,0)=X(I,J,N) AND X(I,J,N+1)=X(I,J,1).
|
|
55
|
+
C THE UNKNOWNS
|
|
56
|
+
C X(0,J,K), X(L+1,J,K), X(I,0,K), AND X(I,M+1,K)
|
|
57
|
+
C ARE ASSUMED TO TAKE ON CERTAIN PRESCRIBED
|
|
58
|
+
C VALUES DESCRIBED BELOW.
|
|
59
|
+
C
|
|
60
|
+
C USAGE CALL POIS3D (LPEROD,L,C1,MPEROD,M,C2,NPEROD,
|
|
61
|
+
C N,A,B,C,LDIMF,MDIMF,F,IERROR,W)
|
|
62
|
+
C
|
|
63
|
+
C ARGUMENTS
|
|
64
|
+
C
|
|
65
|
+
C ON INPUT
|
|
66
|
+
C LPEROD
|
|
67
|
+
C INDICATES THE VALUES THAT X(0,J,K) AND
|
|
68
|
+
C X(L+1,J,K) ARE ASSUMED TO HAVE.
|
|
69
|
+
C = 0 X(0,J,K)=X(L,J,K), X(L+1,J,K)=X(1,J,K)
|
|
70
|
+
C = 1 X(0,J,K) = 0, X(L+1,J,K) = 0
|
|
71
|
+
C = 2 X(0,J,K)=0, X(L+1,J,K)=X(L-1,J,K)
|
|
72
|
+
C = 3 X(0,J,K)=X(2,J,K), X(L+1,J,K)=X(L-1,J,K)
|
|
73
|
+
C = 4 X(0,J,K)=X(2,J,K), X(L+1,J,K) = 0.
|
|
74
|
+
C
|
|
75
|
+
C L
|
|
76
|
+
C THE NUMBER OF UNKNOWNS IN THE I-DIRECTION.
|
|
77
|
+
C L MUST BE AT LEAST 3.
|
|
78
|
+
C
|
|
79
|
+
C C1
|
|
80
|
+
C REAL CONSTANT IN THE ABOVE LINEAR SYSTEM
|
|
81
|
+
C OF EQUATIONS TO BE SOLVED.
|
|
82
|
+
C
|
|
83
|
+
C MPEROD
|
|
84
|
+
C INDICATES THE VALUES THAT X(I,0,K) AND
|
|
85
|
+
C X(I,M+1,K) ARE ASSUMED TO HAVE.
|
|
86
|
+
C = 0 X(I,0,K)=X(I,M,K), X(I,M+1,K)=X(I,1,K)
|
|
87
|
+
C = 1 X(I,0,K)=0, X(I,M+1,K)=0
|
|
88
|
+
C = 2 X(I,0,K)=0, X(I,M+1,K)=X(I,M-1,K)
|
|
89
|
+
C = 3 X(I,0,K)=X(I,2,K) X(I,M+1,K)=X(I,M-1,K)
|
|
90
|
+
C = 4 X(I,0,K)=X(I,2,K) X(I,M+1,K)=0
|
|
91
|
+
C
|
|
92
|
+
C M
|
|
93
|
+
C THE NUMBER OF UNKNOWNS IN THE J-DIRECTION.
|
|
94
|
+
C M MUST BE AT LEAST 3.
|
|
95
|
+
C
|
|
96
|
+
C C2
|
|
97
|
+
C REAL CONSTANT IN THE ABOVE LINEAR SYSTEM
|
|
98
|
+
C OF EQUATIONS TO BE SOLVED.
|
|
99
|
+
C
|
|
100
|
+
C NPEROD
|
|
101
|
+
C = 0 IF A(1) AND C(N) ARE NOT ZERO.
|
|
102
|
+
C = 1 IF A(1) = C(N) = 0.
|
|
103
|
+
C
|
|
104
|
+
C N
|
|
105
|
+
C THE NUMBER OF UNKNOWNS IN THE K-DIRECTION.
|
|
106
|
+
C N MUST BE AT LEAST 3.
|
|
107
|
+
C
|
|
108
|
+
C A, B, C
|
|
109
|
+
C ONE-DIMENSIONAL ARRAYS OF LENGTH N THAT
|
|
110
|
+
C SPECIFY THE COEFFICIENTS IN THE LINEAR
|
|
111
|
+
C EQUATIONS GIVEN ABOVE.
|
|
112
|
+
C
|
|
113
|
+
C IF NPEROD = 0 THE ARRAY ELEMENTS MUST NOT
|
|
114
|
+
C DEPEND UPON INDEX K, BUT MUST BE CONSTANT.
|
|
115
|
+
C SPECIFICALLY,THE SUBROUTINE CHECKS THE
|
|
116
|
+
C FOLLOWING CONDITION
|
|
117
|
+
C A(K) = C(1)
|
|
118
|
+
C C(K) = C(1)
|
|
119
|
+
C B(K) = B(1)
|
|
120
|
+
C FOR K=1,2,...,N.
|
|
121
|
+
C
|
|
122
|
+
C LDIMF
|
|
123
|
+
C THE ROW (OR FIRST) DIMENSION OF THE THREE-
|
|
124
|
+
C DIMENSIONAL ARRAY F AS IT APPEARS IN THE
|
|
125
|
+
C PROGRAM CALLING POIS3D. THIS PARAMETER IS
|
|
126
|
+
C USED TO SPECIFY THE VARIABLE DIMENSION
|
|
127
|
+
C OF F. LDIMF MUST BE AT LEAST L.
|
|
128
|
+
C
|
|
129
|
+
C MDIMF
|
|
130
|
+
C THE COLUMN (OR SECOND) DIMENSION OF THE THREE
|
|
131
|
+
C DIMENSIONAL ARRAY F AS IT APPEARS IN THE
|
|
132
|
+
C PROGRAM CALLING POIS3D. THIS PARAMETER IS
|
|
133
|
+
C USED TO SPECIFY THE VARIABLE DIMENSION
|
|
134
|
+
C OF F. MDIMF MUST BE AT LEAST M.
|
|
135
|
+
C
|
|
136
|
+
C F
|
|
137
|
+
C A THREE-DIMENSIONAL ARRAY THAT SPECIFIES THE
|
|
138
|
+
C VALUES OF THE RIGHT SIDE OF THE LINEAR SYSTEM
|
|
139
|
+
C OF EQUATIONS GIVEN ABOVE. F MUST BE
|
|
140
|
+
C DIMENSIONED AT LEAST L X M X N.
|
|
141
|
+
C
|
|
142
|
+
C W
|
|
143
|
+
C A ONE-DIMENSIONAL ARRAY THAT MUST BE PROVIDED
|
|
144
|
+
C BY THE USER FOR WORK SPACE. THE LENGTH OF W
|
|
145
|
+
C MUST BE AT LEAST
|
|
146
|
+
C 30 + L + M + 2*N + MAX(L,M,N) +
|
|
147
|
+
C 7*(INT((L+1)/2) + INT((M+1)/2)).
|
|
148
|
+
C
|
|
149
|
+
C ON OUTPUT
|
|
150
|
+
C
|
|
151
|
+
C F
|
|
152
|
+
C CONTAINS THE SOLUTION X.
|
|
153
|
+
C
|
|
154
|
+
C IERROR
|
|
155
|
+
C AN ERROR FLAG THAT INDICATES INVALID INPUT
|
|
156
|
+
C PARAMETERS. EXCEPT FOR NUMBER ZERO, A
|
|
157
|
+
C SOLUTION IS NOT ATTEMPTED.
|
|
158
|
+
C = 0 NO ERROR
|
|
159
|
+
C = 1 IF LPEROD .LT. 0 OR .GT. 4
|
|
160
|
+
C = 2 IF L .LT. 3
|
|
161
|
+
C = 3 IF MPEROD .LT. 0 OR .GT. 4
|
|
162
|
+
C = 4 IF M .LT. 3
|
|
163
|
+
C = 5 IF NPEROD .LT. 0 OR .GT. 1
|
|
164
|
+
C = 6 IF N .LT. 3
|
|
165
|
+
C = 7 IF LDIMF .LT. L
|
|
166
|
+
C = 8 IF MDIMF .LT. M
|
|
167
|
+
C = 9 IF A(K) .NE. C(1) OR C(K) .NE. C(1)
|
|
168
|
+
C OR B(I) .NE.B(1) FOR SOME K=1,2,...,N.
|
|
169
|
+
C = 10 IF NPEROD = 1 AND A(1) .NE. 0
|
|
170
|
+
C OR C(N) .NE. 0
|
|
171
|
+
C
|
|
172
|
+
C SINCE THIS IS THE ONLY MEANS OF INDICATING A
|
|
173
|
+
C POSSIBLY INCORRECT CALL TO POIS3D, THE USER
|
|
174
|
+
C SHOULD TEST IERROR AFTER THE CALL.
|
|
175
|
+
C
|
|
176
|
+
C SPECIAL CONDITIONS NONE
|
|
177
|
+
C
|
|
178
|
+
C I/O NONE
|
|
179
|
+
C
|
|
180
|
+
C PRECISION SINGLE
|
|
181
|
+
C
|
|
182
|
+
C REQUIRED LIBRARY COMF AND FFTPACK FROM FISHPACK
|
|
183
|
+
C FILES
|
|
184
|
+
C
|
|
185
|
+
C LANGUAGE FORTRAN
|
|
186
|
+
C
|
|
187
|
+
C HISTORY WRITTEN BY ROLAND SWEET AT NCAR IN THE LATE
|
|
188
|
+
C 1970'S. RELEASED ON NCAR'S PUBLIC SOFTWARE
|
|
189
|
+
C LIBRARIES IN JANUARY, 1980.
|
|
190
|
+
C
|
|
191
|
+
C PORTABILITY FORTRAN 77
|
|
192
|
+
C
|
|
193
|
+
C ALGORITHM THIS SUBROUTINE SOLVES THREE-DIMENSIONAL BLOCK
|
|
194
|
+
C TRIDIAGONAL LINEAR SYSTEMS ARISING FROM FINITE
|
|
195
|
+
C DIFFERENCE APPROXIMATIONS TO THREE-DIMENSIONAL
|
|
196
|
+
C POISSON EQUATIONS USING THE FFT PACKAGE
|
|
197
|
+
C FFTPACK WRITTEN BY PAUL SWARZTRAUBER.
|
|
198
|
+
C
|
|
199
|
+
C TIMING FOR LARGE L, M AND N, THE OPERATION COUNT
|
|
200
|
+
C IS ROUGHLY PROPORTIONAL TO
|
|
201
|
+
C L*M*N*(LOG2(L)+LOG2(M)+5)
|
|
202
|
+
C BUT ALSO DEPENDS ON INPUT PARAMETERS LPEROD
|
|
203
|
+
C AND MPEROD.
|
|
204
|
+
C
|
|
205
|
+
C ACCURACY TO MEASURE THE ACCURACY OF THE ALGORITHM A
|
|
206
|
+
C UNIFORM RANDOM NUMBER GENERATOR WAS USED TO
|
|
207
|
+
C CREATE A SOLUTION ARRAY X FOR THE SYSTEM GIVEN
|
|
208
|
+
C IN THE 'PURPOSE' SECTION WITH
|
|
209
|
+
C A(K) = C(K) = -0.5*B(K) = 1, K=1,2,...,N
|
|
210
|
+
C AND, WHEN NPEROD = 1
|
|
211
|
+
C A(1) = C(N) = 0
|
|
212
|
+
C A(N) = C(1) = 2.
|
|
213
|
+
C
|
|
214
|
+
C THE SOLUTION X WAS SUBSTITUTED INTO THE GIVEN
|
|
215
|
+
C SYSTEM AND, USING DOUBLE PRECISION, A RIGHT
|
|
216
|
+
C SIDE Y WAS COMPUTED. USING THIS ARRAY Y
|
|
217
|
+
C SUBROUTINE POIS3D WAS CALLED TO PRODUCE AN
|
|
218
|
+
C APPROXIMATE SOLUTION Z. RELATIVE ERROR
|
|
219
|
+
C
|
|
220
|
+
C E = MAX(ABS(Z(I,J,K)-X(I,J,K)))/MAX(ABS(X(I,J,K
|
|
221
|
+
C
|
|
222
|
+
C WAS COMPUTED, WHERE THE TWO MAXIMA ARE TAKEN
|
|
223
|
+
C OVER I=1,2,...,L, J=1,2,...,M AND K=1,2,...,N.
|
|
224
|
+
C VALUES OF E ARE GIVEN IN THE TABLE BELOW FOR
|
|
225
|
+
C SOME TYPICAL VALUES OF L,M AND N.
|
|
226
|
+
C
|
|
227
|
+
C L(=M=N) LPEROD MPEROD E
|
|
228
|
+
C ------ ------ ------ ------
|
|
229
|
+
C
|
|
230
|
+
C 16 0 0 1.E-13
|
|
231
|
+
C 15 1 1 4.E-13
|
|
232
|
+
C 17 3 3 2.E-13
|
|
233
|
+
C 32 0 0 2.E-13
|
|
234
|
+
C 31 1 1 2.E-12
|
|
235
|
+
C 33 3 3 7.E-13
|
|
236
|
+
C
|
|
237
|
+
C REFERENCES NONE
|
|
238
|
+
C ********************************************************************
|
|
239
|
+
DIMENSION A(*) ,B(*) ,C(*) ,
|
|
240
|
+
1 F(LDIMF,MDIMF,1) ,W(*) ,SAVE(6)
|
|
241
|
+
C
|
|
242
|
+
LP = LPEROD+1
|
|
243
|
+
MP = MPEROD+1
|
|
244
|
+
NP = NPEROD+1
|
|
245
|
+
C
|
|
246
|
+
C CHECK FOR INVALID INPUT.
|
|
247
|
+
C
|
|
248
|
+
IERROR = 0
|
|
249
|
+
IF (LP.LT.1 .OR. LP.GT.5) IERROR = 1
|
|
250
|
+
IF (L .LT. 3) IERROR = 2
|
|
251
|
+
IF (MP.LT.1 .OR. MP.GT.5) IERROR = 3
|
|
252
|
+
IF (M .LT. 3) IERROR = 4
|
|
253
|
+
IF (NP.LT.1 .OR. NP.GT.2) IERROR = 5
|
|
254
|
+
IF (N .LT. 3) IERROR = 6
|
|
255
|
+
IF (LDIMF .LT. L) IERROR = 7
|
|
256
|
+
IF (MDIMF .LT. M) IERROR = 8
|
|
257
|
+
IF (NP .NE. 1) GO TO 103
|
|
258
|
+
DO 101 K=1,N
|
|
259
|
+
IF (A(K) .NE. C(1)) GO TO 102
|
|
260
|
+
IF (C(K) .NE. C(1)) GO TO 102
|
|
261
|
+
IF (B(K) .NE. B(1)) GO TO 102
|
|
262
|
+
101 CONTINUE
|
|
263
|
+
GO TO 104
|
|
264
|
+
102 IERROR = 9
|
|
265
|
+
103 IF (NPEROD.EQ.1 .AND. (A(1).NE.0. .OR. C(N).NE.0.)) IERROR = 10
|
|
266
|
+
104 IF (IERROR .NE. 0) GO TO 122
|
|
267
|
+
IWYRT = L+1
|
|
268
|
+
IWT = IWYRT+M
|
|
269
|
+
IWD = IWT+MAX0(L,M,N)+1
|
|
270
|
+
IWBB = IWD+N
|
|
271
|
+
IWX = IWBB+N
|
|
272
|
+
IWY = IWX+7*((L+1)/2)+15
|
|
273
|
+
GO TO (105,114),NP
|
|
274
|
+
C
|
|
275
|
+
C REORDER UNKNOWNS WHEN NPEROD = 0.
|
|
276
|
+
C
|
|
277
|
+
105 NH = (N+1)/2
|
|
278
|
+
NHM1 = NH-1
|
|
279
|
+
NODD = 1
|
|
280
|
+
IF (2*NH .EQ. N) NODD = 2
|
|
281
|
+
DO 111 I=1,L
|
|
282
|
+
DO 110 J=1,M
|
|
283
|
+
DO 106 K=1,NHM1
|
|
284
|
+
NHPK = NH+K
|
|
285
|
+
NHMK = NH-K
|
|
286
|
+
W(K) = F(I,J,NHMK)-F(I,J,NHPK)
|
|
287
|
+
W(NHPK) = F(I,J,NHMK)+F(I,J,NHPK)
|
|
288
|
+
106 CONTINUE
|
|
289
|
+
W(NH) = 2.*F(I,J,NH)
|
|
290
|
+
GO TO (108,107),NODD
|
|
291
|
+
107 W(N) = 2.*F(I,J,N)
|
|
292
|
+
108 DO 109 K=1,N
|
|
293
|
+
F(I,J,K) = W(K)
|
|
294
|
+
109 CONTINUE
|
|
295
|
+
110 CONTINUE
|
|
296
|
+
111 CONTINUE
|
|
297
|
+
SAVE(1) = C(NHM1)
|
|
298
|
+
SAVE(2) = A(NH)
|
|
299
|
+
SAVE(3) = C(NH)
|
|
300
|
+
SAVE(4) = B(NHM1)
|
|
301
|
+
SAVE(5) = B(N)
|
|
302
|
+
SAVE(6) = A(N)
|
|
303
|
+
C(NHM1) = 0.
|
|
304
|
+
A(NH) = 0.
|
|
305
|
+
C(NH) = 2.*C(NH)
|
|
306
|
+
GO TO (112,113),NODD
|
|
307
|
+
112 B(NHM1) = B(NHM1)-A(NH-1)
|
|
308
|
+
B(N) = B(N)+A(N)
|
|
309
|
+
GO TO 114
|
|
310
|
+
113 A(N) = C(NH)
|
|
311
|
+
114 CONTINUE
|
|
312
|
+
CALL POS3D1 (LP,L,MP,M,N,A,B,C,LDIMF,MDIMF,F,W,W(IWYRT),W(IWT),
|
|
313
|
+
1 W(IWD),W(IWX),W(IWY),C1,C2,W(IWBB))
|
|
314
|
+
GO TO (115,122),NP
|
|
315
|
+
115 DO 121 I=1,L
|
|
316
|
+
DO 120 J=1,M
|
|
317
|
+
DO 116 K=1,NHM1
|
|
318
|
+
NHMK = NH-K
|
|
319
|
+
NHPK = NH+K
|
|
320
|
+
W(NHMK) = .5*(F(I,J,NHPK)+F(I,J,K))
|
|
321
|
+
W(NHPK) = .5*(F(I,J,NHPK)-F(I,J,K))
|
|
322
|
+
116 CONTINUE
|
|
323
|
+
W(NH) = .5*F(I,J,NH)
|
|
324
|
+
GO TO (118,117),NODD
|
|
325
|
+
117 W(N) = .5*F(I,J,N)
|
|
326
|
+
118 DO 119 K=1,N
|
|
327
|
+
F(I,J,K) = W(K)
|
|
328
|
+
119 CONTINUE
|
|
329
|
+
120 CONTINUE
|
|
330
|
+
121 CONTINUE
|
|
331
|
+
C(NHM1) = SAVE(1)
|
|
332
|
+
A(NH) = SAVE(2)
|
|
333
|
+
C(NH) = SAVE(3)
|
|
334
|
+
B(NHM1) = SAVE(4)
|
|
335
|
+
B(N) = SAVE(5)
|
|
336
|
+
A(N) = SAVE(6)
|
|
337
|
+
122 CONTINUE
|
|
338
|
+
RETURN
|
|
339
|
+
END
|
|
340
|
+
SUBROUTINE POS3D1 (LP,L,MP,M,N,A,B,C,LDIMF,MDIMF,F,XRT,YRT,T,D,
|
|
341
|
+
1 WX,WY,C1,C2,BB)
|
|
342
|
+
DIMENSION A(*) ,B(*) ,C(*) ,
|
|
343
|
+
1 F(LDIMF,MDIMF,1) ,XRT(*) ,YRT(*) ,
|
|
344
|
+
2 T(*) ,D(*) ,WX(*) ,WY(*) ,
|
|
345
|
+
3 BB(*)
|
|
346
|
+
PI = PIMACH(DUM)
|
|
347
|
+
LR = L
|
|
348
|
+
MR = M
|
|
349
|
+
NR = N
|
|
350
|
+
C
|
|
351
|
+
C GENERATE TRANSFORM ROOTS
|
|
352
|
+
C
|
|
353
|
+
LRDEL = ((LP-1)*(LP-3)*(LP-5))/3
|
|
354
|
+
SCALX = LR+LRDEL
|
|
355
|
+
DX = PI/(2.*SCALX)
|
|
356
|
+
GO TO (108,103,101,102,101),LP
|
|
357
|
+
101 DI = 0.5
|
|
358
|
+
SCALX = 2.*SCALX
|
|
359
|
+
GO TO 104
|
|
360
|
+
102 DI = 1.0
|
|
361
|
+
GO TO 104
|
|
362
|
+
103 DI = 0.0
|
|
363
|
+
104 DO 105 I=1,LR
|
|
364
|
+
XRT(I) = -4.*C1*(SIN((FLOAT(I)-DI)*DX))**2
|
|
365
|
+
105 CONTINUE
|
|
366
|
+
SCALX = 2.*SCALX
|
|
367
|
+
GO TO (112,106,110,107,111),LP
|
|
368
|
+
106 CALL SINTI (LR,WX)
|
|
369
|
+
GO TO 112
|
|
370
|
+
107 CALL COSTI (LR,WX)
|
|
371
|
+
GO TO 112
|
|
372
|
+
108 XRT(1) = 0.
|
|
373
|
+
XRT(LR) = -4.*C1
|
|
374
|
+
DO 109 I=3,LR,2
|
|
375
|
+
XRT(I-1) = -4.*C1*(SIN(FLOAT((I-1))*DX))**2
|
|
376
|
+
XRT(I) = XRT(I-1)
|
|
377
|
+
109 CONTINUE
|
|
378
|
+
CALL RFFTI (LR,WX)
|
|
379
|
+
GO TO 112
|
|
380
|
+
110 CALL SINQI (LR,WX)
|
|
381
|
+
GO TO 112
|
|
382
|
+
111 CALL COSQI (LR,WX)
|
|
383
|
+
112 CONTINUE
|
|
384
|
+
MRDEL = ((MP-1)*(MP-3)*(MP-5))/3
|
|
385
|
+
SCALY = MR+MRDEL
|
|
386
|
+
DY = PI/(2.*SCALY)
|
|
387
|
+
GO TO (120,115,113,114,113),MP
|
|
388
|
+
113 DJ = 0.5
|
|
389
|
+
SCALY = 2.*SCALY
|
|
390
|
+
GO TO 116
|
|
391
|
+
114 DJ = 1.0
|
|
392
|
+
GO TO 116
|
|
393
|
+
115 DJ = 0.0
|
|
394
|
+
116 DO 117 J=1,MR
|
|
395
|
+
YRT(J) = -4.*C2*(SIN((FLOAT(J)-DJ)*DY))**2
|
|
396
|
+
117 CONTINUE
|
|
397
|
+
SCALY = 2.*SCALY
|
|
398
|
+
GO TO (124,118,122,119,123),MP
|
|
399
|
+
118 CALL SINTI (MR,WY)
|
|
400
|
+
GO TO 124
|
|
401
|
+
119 CALL COSTI (MR,WY)
|
|
402
|
+
GO TO 124
|
|
403
|
+
120 YRT(1) = 0.
|
|
404
|
+
YRT(MR) = -4.*C2
|
|
405
|
+
DO 121 J=3,MR,2
|
|
406
|
+
YRT(J-1) = -4.*C2*(SIN(FLOAT((J-1))*DY))**2
|
|
407
|
+
YRT(J) = YRT(J-1)
|
|
408
|
+
121 CONTINUE
|
|
409
|
+
CALL RFFTI (MR,WY)
|
|
410
|
+
GO TO 124
|
|
411
|
+
122 CALL SINQI (MR,WY)
|
|
412
|
+
GO TO 124
|
|
413
|
+
123 CALL COSQI (MR,WY)
|
|
414
|
+
124 CONTINUE
|
|
415
|
+
IFWRD = 1
|
|
416
|
+
IS = 1
|
|
417
|
+
125 CONTINUE
|
|
418
|
+
C
|
|
419
|
+
C TRANSFORM X
|
|
420
|
+
C
|
|
421
|
+
DO 141 J=1,MR
|
|
422
|
+
DO 140 K=1,NR
|
|
423
|
+
DO 126 I=1,LR
|
|
424
|
+
T(I) = F(I,J,K)
|
|
425
|
+
126 CONTINUE
|
|
426
|
+
GO TO (127,130,131,134,135),LP
|
|
427
|
+
127 GO TO (128,129),IFWRD
|
|
428
|
+
128 CALL RFFTF (LR,T,WX)
|
|
429
|
+
GO TO 138
|
|
430
|
+
129 CALL RFFTB (LR,T,WX)
|
|
431
|
+
GO TO 138
|
|
432
|
+
130 CALL SINT (LR,T,WX)
|
|
433
|
+
GO TO 138
|
|
434
|
+
131 GO TO (132,133),IFWRD
|
|
435
|
+
132 CALL SINQF (LR,T,WX)
|
|
436
|
+
GO TO 138
|
|
437
|
+
133 CALL SINQB (LR,T,WX)
|
|
438
|
+
GO TO 138
|
|
439
|
+
134 CALL COST (LR,T,WX)
|
|
440
|
+
GO TO 138
|
|
441
|
+
135 GO TO (136,137),IFWRD
|
|
442
|
+
136 CALL COSQF (LR,T,WX)
|
|
443
|
+
GO TO 138
|
|
444
|
+
137 CALL COSQB (LR,T,WX)
|
|
445
|
+
138 CONTINUE
|
|
446
|
+
DO 139 I=1,LR
|
|
447
|
+
F(I,J,K) = T(I)
|
|
448
|
+
139 CONTINUE
|
|
449
|
+
140 CONTINUE
|
|
450
|
+
141 CONTINUE
|
|
451
|
+
GO TO (142,164),IFWRD
|
|
452
|
+
C
|
|
453
|
+
C TRANSFORM Y
|
|
454
|
+
C
|
|
455
|
+
142 CONTINUE
|
|
456
|
+
DO 158 I=1,LR
|
|
457
|
+
DO 157 K=1,NR
|
|
458
|
+
DO 143 J=1,MR
|
|
459
|
+
T(J) = F(I,J,K)
|
|
460
|
+
143 CONTINUE
|
|
461
|
+
GO TO (144,147,148,151,152),MP
|
|
462
|
+
144 GO TO (145,146),IFWRD
|
|
463
|
+
145 CALL RFFTF (MR,T,WY)
|
|
464
|
+
GO TO 155
|
|
465
|
+
146 CALL RFFTB (MR,T,WY)
|
|
466
|
+
GO TO 155
|
|
467
|
+
147 CALL SINT (MR,T,WY)
|
|
468
|
+
GO TO 155
|
|
469
|
+
148 GO TO (149,150),IFWRD
|
|
470
|
+
149 CALL SINQF (MR,T,WY)
|
|
471
|
+
GO TO 155
|
|
472
|
+
150 CALL SINQB (MR,T,WY)
|
|
473
|
+
GO TO 155
|
|
474
|
+
151 CALL COST (MR,T,WY)
|
|
475
|
+
GO TO 155
|
|
476
|
+
152 GO TO (153,154),IFWRD
|
|
477
|
+
153 CALL COSQF (MR,T,WY)
|
|
478
|
+
GO TO 155
|
|
479
|
+
154 CALL COSQB (MR,T,WY)
|
|
480
|
+
155 CONTINUE
|
|
481
|
+
DO 156 J=1,MR
|
|
482
|
+
F(I,J,K) = T(J)
|
|
483
|
+
156 CONTINUE
|
|
484
|
+
157 CONTINUE
|
|
485
|
+
158 CONTINUE
|
|
486
|
+
GO TO (159,125),IFWRD
|
|
487
|
+
159 CONTINUE
|
|
488
|
+
C
|
|
489
|
+
C SOLVE TRIDIAGONAL SYSTEMS IN Z
|
|
490
|
+
C
|
|
491
|
+
DO 163 I=1,LR
|
|
492
|
+
DO 162 J=1,MR
|
|
493
|
+
DO 160 K=1,NR
|
|
494
|
+
BB(K) = B(K)+XRT(I)+YRT(J)
|
|
495
|
+
T(K) = F(I,J,K)
|
|
496
|
+
160 CONTINUE
|
|
497
|
+
CALL TRID (NR,A,BB,C,T,D)
|
|
498
|
+
DO 161 K=1,NR
|
|
499
|
+
F(I,J,K) = T(K)
|
|
500
|
+
161 CONTINUE
|
|
501
|
+
162 CONTINUE
|
|
502
|
+
163 CONTINUE
|
|
503
|
+
IFWRD = 2
|
|
504
|
+
IS = -1
|
|
505
|
+
GO TO 142
|
|
506
|
+
164 CONTINUE
|
|
507
|
+
DO 167 I=1,LR
|
|
508
|
+
DO 166 J=1,MR
|
|
509
|
+
DO 165 K=1,NR
|
|
510
|
+
F(I,J,K) = F(I,J,K)/(SCALX*SCALY)
|
|
511
|
+
165 CONTINUE
|
|
512
|
+
166 CONTINUE
|
|
513
|
+
167 CONTINUE
|
|
514
|
+
RETURN
|
|
515
|
+
END
|
|
516
|
+
SUBROUTINE TRID (MR,A,B,C,Y,D)
|
|
517
|
+
DIMENSION A(*) ,B(*) ,C(*) ,Y(*) ,
|
|
518
|
+
1 D(*)
|
|
519
|
+
M = MR
|
|
520
|
+
MM1 = M-1
|
|
521
|
+
Z = 1./B(1)
|
|
522
|
+
D(1) = C(1)*Z
|
|
523
|
+
Y(1) = Y(1)*Z
|
|
524
|
+
DO 101 I=2,MM1
|
|
525
|
+
Z = 1./(B(I)-A(I)*D(I-1))
|
|
526
|
+
D(I) = C(I)*Z
|
|
527
|
+
Y(I) = (Y(I)-A(I)*Y(I-1))*Z
|
|
528
|
+
101 CONTINUE
|
|
529
|
+
Z = B(M)-A(M)*D(MM1)
|
|
530
|
+
IF (Z .NE. 0.) GO TO 102
|
|
531
|
+
Y(M) = 0.
|
|
532
|
+
GO TO 103
|
|
533
|
+
102 Y(M) = (Y(M)-A(M)*Y(MM1))/Z
|
|
534
|
+
103 CONTINUE
|
|
535
|
+
DO 104 IP=1,MM1
|
|
536
|
+
I = M-IP
|
|
537
|
+
Y(I) = Y(I)-D(I)*Y(I+1)
|
|
538
|
+
104 CONTINUE
|
|
539
|
+
RETURN
|
|
540
|
+
C
|
|
541
|
+
C REVISION HISTORY---
|
|
542
|
+
C
|
|
543
|
+
C SEPTEMBER 1973 VERSION 1
|
|
544
|
+
C APRIL 1976 VERSION 2
|
|
545
|
+
C JANUARY 1978 VERSION 3
|
|
546
|
+
C DECEMBER 1979 VERSION 3.1
|
|
547
|
+
C FEBRUARY 1985 DOCUMENTATION UPGRADE
|
|
548
|
+
C NOVEMBER 1988 VERSION 3.2, FORTRAN 77 CHANGES
|
|
549
|
+
C-----------------------------------------------------------------------
|
|
550
|
+
END
|