PyFishPack 0.1.0__cp313-cp313-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. PyFishPack/__init__.py +86 -0
  2. PyFishPack/__pycache__/__init__.cpython-313.pyc +0 -0
  3. PyFishPack/__pycache__/apps.cpython-313.pyc +0 -0
  4. PyFishPack/_dummy.c +23 -0
  5. PyFishPack/_dummy.cp313-win_amd64.pyd +0 -0
  6. PyFishPack/apps.py +3640 -0
  7. PyFishPack/fishpack.cp313-win_amd64.dll.a +0 -0
  8. PyFishPack/fishpack.cp313-win_amd64.pyd +0 -0
  9. PyFishPack/meson.build +213 -0
  10. PyFishPack/src/archive/f77/Makefile +19 -0
  11. PyFishPack/src/archive/f77/blktri.f +1404 -0
  12. PyFishPack/src/archive/f77/cblktri.f +1414 -0
  13. PyFishPack/src/archive/f77/cmgnbn.f +1592 -0
  14. PyFishPack/src/archive/f77/comf.f +186 -0
  15. PyFishPack/src/archive/f77/fftpack.f +2968 -0
  16. PyFishPack/src/archive/f77/genbun.f +1335 -0
  17. PyFishPack/src/archive/f77/gnbnaux.f +314 -0
  18. PyFishPack/src/archive/f77/hstcrt.f +443 -0
  19. PyFishPack/src/archive/f77/hstcsp.f +683 -0
  20. PyFishPack/src/archive/f77/hstcyl.f +485 -0
  21. PyFishPack/src/archive/f77/hstplr.f +538 -0
  22. PyFishPack/src/archive/f77/hstssp.f +634 -0
  23. PyFishPack/src/archive/f77/hw3crt.f +687 -0
  24. PyFishPack/src/archive/f77/hwscrt.f +512 -0
  25. PyFishPack/src/archive/f77/hwscsp.f +728 -0
  26. PyFishPack/src/archive/f77/hwscyl.f +538 -0
  27. PyFishPack/src/archive/f77/hwsplr.f +602 -0
  28. PyFishPack/src/archive/f77/hwsssp.f +780 -0
  29. PyFishPack/src/archive/f77/pois3d.f +550 -0
  30. PyFishPack/src/archive/f77/poistg.f +875 -0
  31. PyFishPack/src/archive/f77/sepaux.f +361 -0
  32. PyFishPack/src/archive/f77/sepeli.f +1029 -0
  33. PyFishPack/src/archive/f77/sepx4.f +958 -0
  34. PyFishPack/src/centered_axisymmetric_spherical_solver.f90 +1002 -0
  35. PyFishPack/src/centered_cartesian_helmholtz_solver_3d.f90 +819 -0
  36. PyFishPack/src/centered_cartesian_solver.f90 +583 -0
  37. PyFishPack/src/centered_cylindrical_solver.f90 +634 -0
  38. PyFishPack/src/centered_helmholtz_solvers.f90 +156 -0
  39. PyFishPack/src/centered_polar_solver.f90 +746 -0
  40. PyFishPack/src/centered_real_linear_systems_solver.f90 +280 -0
  41. PyFishPack/src/centered_spherical_solver.f90 +928 -0
  42. PyFishPack/src/complex_block_tridiagonal_linear_systems_solver.f90 +1947 -0
  43. PyFishPack/src/complex_linear_systems_solver.f90 +1787 -0
  44. PyFishPack/src/fftpack_c_api.f90 +86 -0
  45. PyFishPack/src/fishpack.f90 +191 -0
  46. PyFishPack/src/fishpack.pyf +504 -0
  47. PyFishPack/src/fishpack_c_api.f90 +365 -0
  48. PyFishPack/src/fishpack_original.pyf +2119 -0
  49. PyFishPack/src/fishpack_precision.f90 +53 -0
  50. PyFishPack/src/general_linear_systems_solver_3d.f90 +296 -0
  51. PyFishPack/src/iterative_solvers.f90 +969 -0
  52. PyFishPack/src/main.f90 +10 -0
  53. PyFishPack/src/pyfishpack_module.c +1302 -0
  54. PyFishPack/src/real_block_tridiagonal_linear_systems_solver.f90 +319 -0
  55. PyFishPack/src/sepeli.f90 +1454 -0
  56. PyFishPack/src/sepx4.f90 +1338 -0
  57. PyFishPack/src/staggered_axisymmetric_spherical_solver.f90 +908 -0
  58. PyFishPack/src/staggered_cartesian_solver.f90 +553 -0
  59. PyFishPack/src/staggered_cylindrical_solver.f90 +630 -0
  60. PyFishPack/src/staggered_helmholtz_solvers.f90 +172 -0
  61. PyFishPack/src/staggered_polar_solver.f90 +651 -0
  62. PyFishPack/src/staggered_real_linear_systems_solver.f90 +258 -0
  63. PyFishPack/src/staggered_spherical_solver.f90 +758 -0
  64. PyFishPack/src/three_dimensional_solvers.f90 +602 -0
  65. PyFishPack/src/type_CenteredCyclicReductionUtility.f90 +1714 -0
  66. PyFishPack/src/type_CyclicReductionUtility.f90 +472 -0
  67. PyFishPack/src/type_FishpackWorkspace.f90 +290 -0
  68. PyFishPack/src/type_GeneralizedCyclicReductionUtility.f90 +1980 -0
  69. PyFishPack/src/type_PeriodicFastFourierTransform.f90 +3789 -0
  70. PyFishPack/src/type_SepAux.f90 +586 -0
  71. PyFishPack/src/type_StaggeredCyclicReductionUtility.f90 +893 -0
  72. pyfishpack-0.1.0.dist-info/DELVEWHEEL +2 -0
  73. pyfishpack-0.1.0.dist-info/METADATA +81 -0
  74. pyfishpack-0.1.0.dist-info/RECORD +81 -0
  75. pyfishpack-0.1.0.dist-info/WHEEL +5 -0
  76. pyfishpack-0.1.0.dist-info/licenses/LICENSE +21 -0
  77. pyfishpack-0.1.0.dist-info/top_level.txt +1 -0
  78. pyfishpack.libs/libgcc_s_seh-1-25d59ccffa1a9009644065b069829e07.dll +0 -0
  79. pyfishpack.libs/libgfortran-5-08f2195cfa0d823e13371c5c3186a82a.dll +0 -0
  80. pyfishpack.libs/libquadmath-0-c5abb9113f1ee64b87a889958e4b7418.dll +0 -0
  81. pyfishpack.libs/libwinpthread-1-83908d14abfafb8b3bfa38cf51ecee56.dll +0 -0
@@ -0,0 +1,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