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,687 @@
1
+ C
2
+ C file hw3crt.f
3
+ C
4
+ SUBROUTINE HW3CRT (XS,XF,L,LBDCND,BDXS,BDXF,YS,YF,M,MBDCND,BDYS,
5
+ 1 BDYF,ZS,ZF,N,NBDCND,BDZS,BDZF,ELMBDA,LDIMF,
6
+ 2 MDIMF,F,PERTRB,IERROR,W)
7
+ C
8
+ C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
9
+ C * *
10
+ C * copyright (c) 1999 by UCAR *
11
+ C * *
12
+ C * UNIVERSITY CORPORATION for ATMOSPHERIC RESEARCH *
13
+ C * *
14
+ C * all rights reserved *
15
+ C * *
16
+ C * FISHPACK version 4.1 *
17
+ C * *
18
+ C * A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE SOLUTION OF *
19
+ C * *
20
+ C * SEPARABLE ELLIPTIC PARTIAL DIFFERENTIAL EQUATIONS *
21
+ C * *
22
+ C * BY *
23
+ C * *
24
+ C * JOHN ADAMS, PAUL SWARZTRAUBER AND ROLAND SWEET *
25
+ C * *
26
+ C * OF *
27
+ C * *
28
+ C * THE NATIONAL CENTER FOR ATMOSPHERIC RESEARCH *
29
+ C * *
30
+ C * BOULDER, COLORADO (80307) U.S.A. *
31
+ C * *
32
+ C * WHICH IS SPONSORED BY *
33
+ C * *
34
+ C * THE NATIONAL SCIENCE FOUNDATION *
35
+ C * *
36
+ C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
37
+ C
38
+ C
39
+ C
40
+ C DIMENSION OF BDXS(MDIMF,N+1), BDXF(MDIMF,N+1),
41
+ C ARGUMENTS BDYS(LDIMF,N+1), BDYF(LDIMF,N+1),
42
+ C BDZS(LDIMF,M+1), BDZF(LDIMF,M+1),
43
+ C F(LDIMF,MDIMF,N+1), W(SEE ARGUMENT LIST)
44
+ C
45
+ C LATEST REVISION NOVEMBER 1988
46
+ C
47
+ C PURPOSE SOLVES THE STANDARD FIVE-POINT FINITE
48
+ C DIFFERENCE APPROXIMATION TO THE HELMHOLTZ
49
+ C EQUATION IN CARTESIAN COORDINATES. THIS
50
+ C EQUATION IS
51
+ C
52
+ C (D/DX)(DU/DX) + (D/DY)(DU/DY) +
53
+ C (D/DZ)(DU/DZ) + LAMBDA*U = F(X,Y,Z) .
54
+ C
55
+ C USAGE CALL HW3CRT (XS,XF,L,LBDCND,BDXS,BDXF,YS,YF,M,
56
+ C MBDCND,BDYS,BDYF,ZS,ZF,N,NBDCND,
57
+ C BDZS,BDZF,ELMBDA,LDIMF,MDIMF,F,
58
+ C PERTRB,IERROR,W)
59
+ C
60
+ C ARGUMENTS
61
+ C
62
+ C ON INPUT XS,XF
63
+ C
64
+ C THE RANGE OF X, I.E. XS .LE. X .LE. XF .
65
+ C XS MUST BE LESS THAN XF.
66
+ C
67
+ C L
68
+ C THE NUMBER OF PANELS INTO WHICH THE
69
+ C INTERVAL (XS,XF) IS SUBDIVIDED.
70
+ C HENCE, THERE WILL BE L+1 GRID POINTS
71
+ C IN THE X-DIRECTION GIVEN BY
72
+ C X(I) = XS+(I-1)DX FOR I=1,2,...,L+1,
73
+ C WHERE DX = (XF-XS)/L IS THE PANEL WIDTH.
74
+ C L MUST BE AT LEAST 5.
75
+ C
76
+ C LBDCND
77
+ C INDICATES THE TYPE OF BOUNDARY CONDITIONS
78
+ C AT X = XS AND X = XF.
79
+ C
80
+ C = 0 IF THE SOLUTION IS PERIODIC IN X,
81
+ C I.E. U(L+I,J,K) = U(I,J,K).
82
+ C = 1 IF THE SOLUTION IS SPECIFIED AT
83
+ C X = XS AND X = XF.
84
+ C = 2 IF THE SOLUTION IS SPECIFIED AT
85
+ C X = XS AND THE DERIVATIVE OF THE
86
+ C SOLUTION WITH RESPECT TO X IS
87
+ C SPECIFIED AT X = XF.
88
+ C = 3 IF THE DERIVATIVE OF THE SOLUTION
89
+ C WITH RESPECT TO X IS SPECIFIED AT
90
+ C X = XS AND X = XF.
91
+ C = 4 IF THE DERIVATIVE OF THE SOLUTION
92
+ C WITH RESPECT TO X IS SPECIFIED AT
93
+ C X = XS AND THE SOLUTION IS SPECIFIED
94
+ C AT X=XF.
95
+ C
96
+ C BDXS
97
+ C A TWO-DIMENSIONAL ARRAY THAT SPECIFIES THE
98
+ C VALUES OF THE DERIVATIVE OF THE SOLUTION
99
+ C WITH RESPECT TO X AT X = XS.
100
+ C
101
+ C WHEN LBDCND = 3 OR 4,
102
+ C
103
+ C BDXS(J,K) = (D/DX)U(XS,Y(J),Z(K)),
104
+ C J=1,2,...,M+1, K=1,2,...,N+1.
105
+ C
106
+ C WHEN LBDCND HAS ANY OTHER VALUE, BDXS
107
+ C IS A DUMMY VARIABLE. BDXS MUST BE
108
+ C DIMENSIONED AT LEAST (M+1)*(N+1).
109
+ C
110
+ C BDXF
111
+ C A TWO-DIMENSIONAL ARRAY THAT SPECIFIES THE
112
+ C VALUES OF THE DERIVATIVE OF THE SOLUTION
113
+ C WITH RESPECT TO X AT X = XF.
114
+ C
115
+ C WHEN LBDCND = 2 OR 3,
116
+ C
117
+ C BDXF(J,K) = (D/DX)U(XF,Y(J),Z(K)),
118
+ C J=1,2,...,M+1, K=1,2,...,N+1.
119
+ C
120
+ C WHEN LBDCND HAS ANY OTHER VALUE, BDXF IS
121
+ C A DUMMY VARIABLE. BDXF MUST BE
122
+ C DIMENSIONED AT LEAST (M+1)*(N+1).
123
+ C
124
+ C YS,YF
125
+ C THE RANGE OF Y, I.E. YS .LE. Y .LE. YF.
126
+ C YS MUST BE LESS THAN YF.
127
+ C
128
+ C M
129
+ C THE NUMBER OF PANELS INTO WHICH THE
130
+ C INTERVAL (YS,YF) IS SUBDIVIDED.
131
+ C HENCE, THERE WILL BE M+1 GRID POINTS IN
132
+ C THE Y-DIRECTION GIVEN BY Y(J) = YS+(J-1)DY
133
+ C FOR J=1,2,...,M+1,
134
+ C WHERE DY = (YF-YS)/M IS THE PANEL WIDTH.
135
+ C M MUST BE AT LEAST 5.
136
+ C
137
+ C MBDCND
138
+ C INDICATES THE TYPE OF BOUNDARY CONDITIONS
139
+ C AT Y = YS AND Y = YF.
140
+ C
141
+ C = 0 IF THE SOLUTION IS PERIODIC IN Y, I.E.
142
+ C U(I,M+J,K) = U(I,J,K).
143
+ C = 1 IF THE SOLUTION IS SPECIFIED AT
144
+ C Y = YS AND Y = YF.
145
+ C = 2 IF THE SOLUTION IS SPECIFIED AT
146
+ C Y = YS AND THE DERIVATIVE OF THE
147
+ C SOLUTION WITH RESPECT TO Y IS
148
+ C SPECIFIED AT Y = YF.
149
+ C = 3 IF THE DERIVATIVE OF THE SOLUTION
150
+ C WITH RESPECT TO Y IS SPECIFIED AT
151
+ C Y = YS AND Y = YF.
152
+ C = 4 IF THE DERIVATIVE OF THE SOLUTION
153
+ C WITH RESPECT TO Y IS SPECIFIED AT
154
+ C AT Y = YS AND THE SOLUTION IS
155
+ C SPECIFIED AT Y=YF.
156
+ C
157
+ C BDYS
158
+ C A TWO-DIMENSIONAL ARRAY THAT SPECIFIES
159
+ C THE VALUES OF THE DERIVATIVE OF THE
160
+ C SOLUTION WITH RESPECT TO Y AT Y = YS.
161
+ C
162
+ C WHEN MBDCND = 3 OR 4,
163
+ C
164
+ C BDYS(I,K) = (D/DY)U(X(I),YS,Z(K)),
165
+ C I=1,2,...,L+1, K=1,2,...,N+1.
166
+ C
167
+ C WHEN MBDCND HAS ANY OTHER VALUE, BDYS
168
+ C IS A DUMMY VARIABLE. BDYS MUST BE
169
+ C DIMENSIONED AT LEAST (L+1)*(N+1).
170
+ C
171
+ C BDYF
172
+ C A TWO-DIMENSIONAL ARRAY THAT SPECIFIES
173
+ C THE VALUES OF THE DERIVATIVE OF THE
174
+ C SOLUTION WITH RESPECT TO Y AT Y = YF.
175
+ C
176
+ C WHEN MBDCND = 2 OR 3,
177
+ C
178
+ C BDYF(I,K) = (D/DY)U(X(I),YF,Z(K)),
179
+ C I=1,2,...,L+1, K=1,2,...,N+1.
180
+ C
181
+ C WHEN MBDCND HAS ANY OTHER VALUE, BDYF
182
+ C IS A DUMMY VARIABLE. BDYF MUST BE
183
+ C DIMENSIONED AT LEAST (L+1)*(N+1).
184
+ C
185
+ C ZS,ZF
186
+ C THE RANGE OF Z, I.E. ZS .LE. Z .LE. ZF.
187
+ C ZS MUST BE LESS THAN ZF.
188
+ C
189
+ C N
190
+ C THE NUMBER OF PANELS INTO WHICH THE
191
+ C INTERVAL (ZS,ZF) IS SUBDIVIDED.
192
+ C HENCE, THERE WILL BE N+1 GRID POINTS
193
+ C IN THE Z-DIRECTION GIVEN BY
194
+ C Z(K) = ZS+(K-1)DZ FOR K=1,2,...,N+1,
195
+ C WHERE DZ = (ZF-ZS)/N IS THE PANEL WIDTH.
196
+ C N MUST BE AT LEAST 5.
197
+ C
198
+ C NBDCND
199
+ C INDICATES THE TYPE OF BOUNDARY CONDITIONS
200
+ C AT Z = ZS AND Z = ZF.
201
+ C
202
+ C = 0 IF THE SOLUTION IS PERIODIC IN Z, I.E.
203
+ C U(I,J,N+K) = U(I,J,K).
204
+ C = 1 IF THE SOLUTION IS SPECIFIED AT
205
+ C Z = ZS AND Z = ZF.
206
+ C = 2 IF THE SOLUTION IS SPECIFIED AT
207
+ C Z = ZS AND THE DERIVATIVE OF THE
208
+ C SOLUTION WITH RESPECT TO Z IS
209
+ C SPECIFIED AT Z = ZF.
210
+ C = 3 IF THE DERIVATIVE OF THE SOLUTION
211
+ C WITH RESPECT TO Z IS SPECIFIED AT
212
+ C Z = ZS AND Z = ZF.
213
+ C = 4 IF THE DERIVATIVE OF THE SOLUTION
214
+ C WITH RESPECT TO Z IS SPECIFIED AT
215
+ C Z = ZS AND THE SOLUTION IS SPECIFIED
216
+ C AT Z=ZF.
217
+ C
218
+ C BDZS
219
+ C A TWO-DIMENSIONAL ARRAY THAT SPECIFIES
220
+ C THE VALUES OF THE DERIVATIVE OF THE
221
+ C SOLUTION WITH RESPECT TO Z AT Z = ZS.
222
+ C
223
+ C WHEN NBDCND = 3 OR 4,
224
+ C
225
+ C BDZS(I,J) = (D/DZ)U(X(I),Y(J),ZS),
226
+ C I=1,2,...,L+1, J=1,2,...,M+1.
227
+ C
228
+ C WHEN NBDCND HAS ANY OTHER VALUE, BDZS
229
+ C IS A DUMMY VARIABLE. BDZS MUST BE
230
+ C DIMENSIONED AT LEAST (L+1)*(M+1).
231
+ C
232
+ C BDZF
233
+ C A TWO-DIMENSIONAL ARRAY THAT SPECIFIES
234
+ C THE VALUES OF THE DERIVATIVE OF THE
235
+ C SOLUTION WITH RESPECT TO Z AT Z = ZF.
236
+ C
237
+ C WHEN NBDCND = 2 OR 3,
238
+ C
239
+ C BDZF(I,J) = (D/DZ)U(X(I),Y(J),ZF),
240
+ C I=1,2,...,L+1, J=1,2,...,M+1.
241
+ C
242
+ C WHEN NBDCND HAS ANY OTHER VALUE, BDZF
243
+ C IS A DUMMY VARIABLE. BDZF MUST BE
244
+ C DIMENSIONED AT LEAST (L+1)*(M+1).
245
+ C
246
+ C ELMBDA
247
+ C THE CONSTANT LAMBDA IN THE HELMHOLTZ
248
+ C EQUATION. IF LAMBDA .GT. 0, A SOLUTION
249
+ C MAY NOT EXIST. HOWEVER, HW3CRT WILL
250
+ C ATTEMPT TO FIND A SOLUTION.
251
+ C
252
+ C LDIMF
253
+ C THE ROW (OR FIRST) DIMENSION OF THE
254
+ C ARRAYS F,BDYS,BDYF,BDZS,AND BDZF AS IT
255
+ C APPEARS IN THE PROGRAM CALLING HW3CRT.
256
+ C THIS PARAMETER IS USED TO SPECIFY THE
257
+ C VARIABLE DIMENSION OF THESE ARRAYS.
258
+ C LDIMF MUST BE AT LEAST L+1.
259
+ C
260
+ C MDIMF
261
+ C THE COLUMN (OR SECOND) DIMENSION OF THE
262
+ C ARRAY F AND THE ROW (OR FIRST) DIMENSION
263
+ C OF THE ARRAYS BDXS AND BDXF AS IT APPEARS
264
+ C IN THE PROGRAM CALLING HW3CRT. THIS
265
+ C PARAMETER IS USED TO SPECIFY THE VARIABLE
266
+ C DIMENSION OF THESE ARRAYS.
267
+ C MDIMF MUST BE AT LEAST M+1.
268
+ C
269
+ C F
270
+ C A THREE-DIMENSIONAL ARRAY OF DIMENSION AT
271
+ C AT LEAST (L+1)*(M+1)*(N+1), SPECIFYING THE
272
+ C VALUES OF THE RIGHT SIDE OF THE HELMHOLZ
273
+ C EQUATION AND BOUNDARY VALUES (IF ANY).
274
+ C
275
+ C ON THE INTERIOR, F IS DEFINED AS FOLLOWS:
276
+ C FOR I=2,3,...,L, J=2,3,...,M,
277
+ C AND K=2,3,...,N
278
+ C F(I,J,K) = F(X(I),Y(J),Z(K)).
279
+ C
280
+ C ON THE BOUNDARIES, F IS DEFINED AS FOLLOWS:
281
+ C FOR J=1,2,...,M+1, K=1,2,...,N+1,
282
+ C AND I=1,2,...,L+1
283
+ C
284
+ C LBDCND F(1,J,K) F(L+1,J,K)
285
+ C ------ --------------- ---------------
286
+ C
287
+ C 0 F(XS,Y(J),Z(K)) F(XS,Y(J),Z(K))
288
+ C 1 U(XS,Y(J),Z(K)) U(XF,Y(J),Z(K))
289
+ C 2 U(XS,Y(J),Z(K)) F(XF,Y(J),Z(K))
290
+ C 3 F(XS,Y(J),Z(K)) F(XF,Y(J),Z(K))
291
+ C 4 F(XS,Y(J),Z(K)) U(XF,Y(J),Z(K))
292
+ C
293
+ C MBDCND F(I,1,K) F(I,M+1,K)
294
+ C ------ --------------- ---------------
295
+ C
296
+ C 0 F(X(I),YS,Z(K)) F(X(I),YS,Z(K))
297
+ C 1 U(X(I),YS,Z(K)) U(X(I),YF,Z(K))
298
+ C 2 U(X(I),YS,Z(K)) F(X(I),YF,Z(K))
299
+ C 3 F(X(I),YS,Z(K)) F(X(I),YF,Z(K))
300
+ C 4 F(X(I),YS,Z(K)) U(X(I),YF,Z(K))
301
+ C
302
+ C NBDCND F(I,J,1) F(I,J,N+1)
303
+ C ------ --------------- ---------------
304
+ C
305
+ C 0 F(X(I),Y(J),ZS) F(X(I),Y(J),ZS)
306
+ C 1 U(X(I),Y(J),ZS) U(X(I),Y(J),ZF)
307
+ C 2 U(X(I),Y(J),ZS) F(X(I),Y(J),ZF)
308
+ C 3 F(X(I),Y(J),ZS) F(X(I),Y(J),ZF)
309
+ C 4 F(X(I),Y(J),ZS) U(X(I),Y(J),ZF)
310
+ C
311
+ C NOTE:
312
+ C IF THE TABLE CALLS FOR BOTH THE SOLUTION
313
+ C U AND THE RIGHT SIDE F ON A BOUNDARY,
314
+ C THEN THE SOLUTION MUST BE SPECIFIED.
315
+ C
316
+ C W
317
+ C A ONE-DIMENSIONAL ARRAY THAT MUST BE
318
+ C PROVIDED BY THE USER FOR WORK SPACE.
319
+ C THE LENGTH OF W MUST BE AT LEAST
320
+ C 30 + L + M + 5*N + MAX(L,M,N) +
321
+ C 7*(INT((L+1)/2) + INT((M+1)/2))
322
+ C
323
+ C
324
+ C
325
+ C
326
+ C ON OUTPUT F
327
+ C CONTAINS THE SOLUTION U(I,J,K) OF THE
328
+ C FINITE DIFFERENCE APPROXIMATION FOR THE
329
+ C GRID POINT (X(I),Y(J),Z(K)) FOR
330
+ C I=1,2,...,L+1, J=1,2,...,M+1,
331
+ C AND K=1,2,...,N+1.
332
+ C
333
+ C PERTRB
334
+ C IF A COMBINATION OF PERIODIC OR DERIVATIVE
335
+ C BOUNDARY CONDITIONS IS SPECIFIED FOR A
336
+ C POISSON EQUATION (LAMBDA = 0), A SOLUTION
337
+ C MAY NOT EXIST. PERTRB IS A CONSTANT,
338
+ C CALCULATED AND SUBTRACTED FROM F, WHICH
339
+ C ENSURES THAT A SOLUTION EXISTS. PWSCRT
340
+ C THEN COMPUTES THIS SOLUTION, WHICH IS A
341
+ C LEAST SQUARES SOLUTION TO THE ORIGINAL
342
+ C APPROXIMATION. THIS SOLUTION IS NOT
343
+ C UNIQUE AND IS UNNORMALIZED. THE VALUE OF
344
+ C PERTRB SHOULD BE SMALL COMPARED TO THE
345
+ C THE RIGHT SIDE F. OTHERWISE, A SOLUTION
346
+ C IS OBTAINED TO AN ESSENTIALLY DIFFERENT
347
+ C PROBLEM. THIS COMPARISON SHOULD ALWAYS
348
+ C BE MADE TO INSURE THAT A MEANINGFUL
349
+ C SOLUTION HAS BEEN OBTAINED.
350
+ C
351
+ C IERROR
352
+ C AN ERROR FLAG THAT INDICATES INVALID INPUT
353
+ C PARAMETERS. EXCEPT FOR NUMBERS 0 AND 12,
354
+ C A SOLUTION IS NOT ATTEMPTED.
355
+ C
356
+ C = 0 NO ERROR
357
+ C = 1 XS .GE. XF
358
+ C = 2 L .LT. 5
359
+ C = 3 LBDCND .LT. 0 .OR. LBDCND .GT. 4
360
+ C = 4 YS .GE. YF
361
+ C = 5 M .LT. 5
362
+ C = 6 MBDCND .LT. 0 .OR. MBDCND .GT. 4
363
+ C = 7 ZS .GE. ZF
364
+ C = 8 N .LT. 5
365
+ C = 9 NBDCND .LT. 0 .OR. NBDCND .GT. 4
366
+ C = 10 LDIMF .LT. L+1
367
+ C = 11 MDIMF .LT. M+1
368
+ C = 12 LAMBDA .GT. 0
369
+ C
370
+ C SINCE THIS IS THE ONLY MEANS OF INDICATING
371
+ C A POSSIBLY INCORRECT CALL TO HW3CRT, THE
372
+ C USER SHOULD TEST IERROR AFTER THE CALL.
373
+ C
374
+ C SPECIAL CONDITIONS NONE
375
+ C
376
+ C I/O NONE
377
+ C
378
+ C PRECISION SINGLE
379
+ C
380
+ C REQUIRED LIBRARY POIS3D, FFTPACK, AND COMF FROM FISHPACK
381
+ C FILES
382
+ C
383
+ C LANGUAGE FORTRAN
384
+ C
385
+ C HISTORY WRITTEN BY ROLAND SWEET AT NCAR IN THE LATE
386
+ C 1970'S. RELEASED ON NCAR'S PUBLIC SOFTWARE
387
+ C LIBRARIES IN JANUARY 1980.
388
+ C
389
+ C PORTABILITY FORTRAN 77
390
+ C
391
+ C ALGORITHM THIS SUBROUTINE DEFINES THE FINITE DIFFERENCE
392
+ C EQUATIONS, INCORPORATES BOUNDARY DATA, AND
393
+ C ADJUSTS THE RIGHT SIDE OF SINGULAR SYSTEMS AND
394
+ C THEN CALLS POIS3D TO SOLVE THE SYSTEM.
395
+ C
396
+ C TIMING FOR LARGE L, M AND N, THE OPERATION COUNT
397
+ C IS ROUGHLY PROPORTIONAL TO
398
+ C L*M*N*(LOG2(L)+LOG2(M)+5),
399
+ C BUT ALSO DEPENDS ON INPUT PARAMETERS LBDCND
400
+ C AND MBDCND.
401
+ C
402
+ C ACCURACY THE SOLUTION PROCESS EMPLOYED RESULTS IN
403
+ C A LOSS OF NO MORE THAN FOUR SIGNIFICANT
404
+ C DIGITS FOR L, M AND N AS LARGE AS 32.
405
+ C MORE DETAILED INFORMATION ABOUT ACCURACY
406
+ C CAN BE FOUND IN THE DOCUMENTATION FOR
407
+ C ROUTINE POIS3D WHICH IS THE ROUTINE THAT
408
+ C ACTUALLY SOLVES THE FINITE DIFFERENCE
409
+ C EQUATIONS.
410
+ C
411
+ C REFERENCES NONE
412
+ C***********************************************************************
413
+ DIMENSION BDXS(MDIMF,*) ,BDXF(MDIMF,*) ,
414
+ 1 BDYS(LDIMF,*) ,BDYF(LDIMF,*) ,
415
+ 2 BDZS(LDIMF,*) ,BDZF(LDIMF,*) ,
416
+ 3 F(LDIMF,MDIMF,*) ,W(*)
417
+ C
418
+ C CHECK FOR INVALID INPUT.
419
+ C
420
+ IERROR = 0
421
+ IF (XF .LE. XS) IERROR = 1
422
+ IF (L .LT. 5) IERROR = 2
423
+ IF (LBDCND.LT.0 .OR. LBDCND.GT.4) IERROR = 3
424
+ IF (YF .LE. YS) IERROR = 4
425
+ IF (M .LT. 5) IERROR = 5
426
+ IF (MBDCND.LT.0 .OR. MBDCND.GT.4) IERROR = 6
427
+ IF (ZF .LE. ZS) IERROR = 7
428
+ IF (N .LT. 5) IERROR = 8
429
+ IF (NBDCND.LT.0 .OR. NBDCND.GT.4) IERROR = 9
430
+ IF (LDIMF .LT. L+1) IERROR = 10
431
+ IF (MDIMF .LT. M+1) IERROR = 11
432
+ IF (IERROR .NE. 0) GO TO 188
433
+ DY = (YF-YS)/FLOAT(M)
434
+ TWBYDY = 2./DY
435
+ C2 = 1./(DY**2)
436
+ MSTART = 1
437
+ MSTOP = M
438
+ MP1 = M+1
439
+ MP = MBDCND+1
440
+ GO TO (104,101,101,102,102),MP
441
+ 101 MSTART = 2
442
+ 102 GO TO (104,104,103,103,104),MP
443
+ 103 MSTOP = MP1
444
+ 104 MUNK = MSTOP-MSTART+1
445
+ DZ = (ZF-ZS)/FLOAT(N)
446
+ TWBYDZ = 2./DZ
447
+ NP = NBDCND+1
448
+ C3 = 1./(DZ**2)
449
+ NP1 = N+1
450
+ NSTART = 1
451
+ NSTOP = N
452
+ GO TO (108,105,105,106,106),NP
453
+ 105 NSTART = 2
454
+ 106 GO TO (108,108,107,107,108),NP
455
+ 107 NSTOP = NP1
456
+ 108 NUNK = NSTOP-NSTART+1
457
+ LP1 = L+1
458
+ DX = (XF-XS)/FLOAT(L)
459
+ C1 = 1./(DX**2)
460
+ TWBYDX = 2./DX
461
+ LP = LBDCND+1
462
+ LSTART = 1
463
+ LSTOP = L
464
+ C
465
+ C ENTER BOUNDARY DATA FOR X-BOUNDARIES.
466
+ C
467
+ GO TO (122,109,109,112,112),LP
468
+ 109 LSTART = 2
469
+ DO 111 J=MSTART,MSTOP
470
+ DO 110 K=NSTART,NSTOP
471
+ F(2,J,K) = F(2,J,K)-C1*F(1,J,K)
472
+ 110 CONTINUE
473
+ 111 CONTINUE
474
+ GO TO 115
475
+ 112 DO 114 J=MSTART,MSTOP
476
+ DO 113 K=NSTART,NSTOP
477
+ F(1,J,K) = F(1,J,K)+TWBYDX*BDXS(J,K)
478
+ 113 CONTINUE
479
+ 114 CONTINUE
480
+ 115 GO TO (122,116,119,119,116),LP
481
+ 116 DO 118 J=MSTART,MSTOP
482
+ DO 117 K=NSTART,NSTOP
483
+ F(L,J,K) = F(L,J,K)-C1*F(LP1,J,K)
484
+ 117 CONTINUE
485
+ 118 CONTINUE
486
+ GO TO 122
487
+ 119 LSTOP = LP1
488
+ DO 121 J=MSTART,MSTOP
489
+ DO 120 K=NSTART,NSTOP
490
+ F(LP1,J,K) = F(LP1,J,K)-TWBYDX*BDXF(J,K)
491
+ 120 CONTINUE
492
+ 121 CONTINUE
493
+ 122 LUNK = LSTOP-LSTART+1
494
+ C
495
+ C ENTER BOUNDARY DATA FOR Y-BOUNDARIES.
496
+ C
497
+ GO TO (136,123,123,126,126),MP
498
+ 123 DO 125 I=LSTART,LSTOP
499
+ DO 124 K=NSTART,NSTOP
500
+ F(I,2,K) = F(I,2,K)-C2*F(I,1,K)
501
+ 124 CONTINUE
502
+ 125 CONTINUE
503
+ GO TO 129
504
+ 126 DO 128 I=LSTART,LSTOP
505
+ DO 127 K=NSTART,NSTOP
506
+ F(I,1,K) = F(I,1,K)+TWBYDY*BDYS(I,K)
507
+ 127 CONTINUE
508
+ 128 CONTINUE
509
+ 129 GO TO (136,130,133,133,130),MP
510
+ 130 DO 132 I=LSTART,LSTOP
511
+ DO 131 K=NSTART,NSTOP
512
+ F(I,M,K) = F(I,M,K)-C2*F(I,MP1,K)
513
+ 131 CONTINUE
514
+ 132 CONTINUE
515
+ GO TO 136
516
+ 133 DO 135 I=LSTART,LSTOP
517
+ DO 134 K=NSTART,NSTOP
518
+ F(I,MP1,K) = F(I,MP1,K)-TWBYDY*BDYF(I,K)
519
+ 134 CONTINUE
520
+ 135 CONTINUE
521
+ 136 CONTINUE
522
+ C
523
+ C ENTER BOUNDARY DATA FOR Z-BOUNDARIES.
524
+ C
525
+ GO TO (150,137,137,140,140),NP
526
+ 137 DO 139 I=LSTART,LSTOP
527
+ DO 138 J=MSTART,MSTOP
528
+ F(I,J,2) = F(I,J,2)-C3*F(I,J,1)
529
+ 138 CONTINUE
530
+ 139 CONTINUE
531
+ GO TO 143
532
+ 140 DO 142 I=LSTART,LSTOP
533
+ DO 141 J=MSTART,MSTOP
534
+ F(I,J,1) = F(I,J,1)+TWBYDZ*BDZS(I,J)
535
+ 141 CONTINUE
536
+ 142 CONTINUE
537
+ 143 GO TO (150,144,147,147,144),NP
538
+ 144 DO 146 I=LSTART,LSTOP
539
+ DO 145 J=MSTART,MSTOP
540
+ F(I,J,N) = F(I,J,N)-C3*F(I,J,NP1)
541
+ 145 CONTINUE
542
+ 146 CONTINUE
543
+ GO TO 150
544
+ 147 DO 149 I=LSTART,LSTOP
545
+ DO 148 J=MSTART,MSTOP
546
+ F(I,J,NP1) = F(I,J,NP1)-TWBYDZ*BDZF(I,J)
547
+ 148 CONTINUE
548
+ 149 CONTINUE
549
+ C
550
+ C DEFINE A,B,C COEFFICIENTS IN W-ARRAY.
551
+ C
552
+ 150 CONTINUE
553
+ IWB = NUNK+1
554
+ IWC = IWB+NUNK
555
+ IWW = IWC+NUNK
556
+ DO 151 K=1,NUNK
557
+ I = IWC+K-1
558
+ W(K) = C3
559
+ W(I) = C3
560
+ I = IWB+K-1
561
+ W(I) = -2.*C3+ELMBDA
562
+ 151 CONTINUE
563
+ GO TO (155,155,153,152,152),NP
564
+ 152 W(IWC) = 2.*C3
565
+ 153 GO TO (155,155,154,154,155),NP
566
+ 154 W(IWB-1) = 2.*C3
567
+ 155 CONTINUE
568
+ PERTRB = 0.
569
+ C
570
+ C FOR SINGULAR PROBLEMS ADJUST DATA TO INSURE A SOLUTION WILL EXIST.
571
+ C
572
+ GO TO (156,172,172,156,172),LP
573
+ 156 GO TO (157,172,172,157,172),MP
574
+ 157 GO TO (158,172,172,158,172),NP
575
+ 158 IF (ELMBDA) 172,160,159
576
+ 159 IERROR = 12
577
+ GO TO 172
578
+ 160 CONTINUE
579
+ MSTPM1 = MSTOP-1
580
+ LSTPM1 = LSTOP-1
581
+ NSTPM1 = NSTOP-1
582
+ XLP = (2+LP)/3
583
+ YLP = (2+MP)/3
584
+ ZLP = (2+NP)/3
585
+ S1 = 0.
586
+ DO 164 K=2,NSTPM1
587
+ DO 162 J=2,MSTPM1
588
+ DO 161 I=2,LSTPM1
589
+ S1 = S1+F(I,J,K)
590
+ 161 CONTINUE
591
+ S1 = S1+(F(1,J,K)+F(LSTOP,J,K))/XLP
592
+ 162 CONTINUE
593
+ S2 = 0.
594
+ DO 163 I=2,LSTPM1
595
+ S2 = S2+F(I,1,K)+F(I,MSTOP,K)
596
+ 163 CONTINUE
597
+ S2 = (S2+(F(1,1,K)+F(1,MSTOP,K)+F(LSTOP,1,K)+F(LSTOP,MSTOP,K))/
598
+ 1 XLP)/YLP
599
+ S1 = S1+S2
600
+ 164 CONTINUE
601
+ S = (F(1,1,1)+F(LSTOP,1,1)+F(1,1,NSTOP)+F(LSTOP,1,NSTOP)+
602
+ 1 F(1,MSTOP,1)+F(LSTOP,MSTOP,1)+F(1,MSTOP,NSTOP)+
603
+ 2 F(LSTOP,MSTOP,NSTOP))/(XLP*YLP)
604
+ DO 166 J=2,MSTPM1
605
+ DO 165 I=2,LSTPM1
606
+ S = S+F(I,J,1)+F(I,J,NSTOP)
607
+ 165 CONTINUE
608
+ 166 CONTINUE
609
+ S2 = 0.
610
+ DO 167 I=2,LSTPM1
611
+ S2 = S2+F(I,1,1)+F(I,1,NSTOP)+F(I,MSTOP,1)+F(I,MSTOP,NSTOP)
612
+ 167 CONTINUE
613
+ S = S2/YLP+S
614
+ S2 = 0.
615
+ DO 168 J=2,MSTPM1
616
+ S2 = S2+F(1,J,1)+F(1,J,NSTOP)+F(LSTOP,J,1)+F(LSTOP,J,NSTOP)
617
+ 168 CONTINUE
618
+ S = S2/XLP+S
619
+ PERTRB = (S/ZLP+S1)/((FLOAT(LUNK+1)-XLP)*(FLOAT(MUNK+1)-YLP)*
620
+ 1 (FLOAT(NUNK+1)-ZLP))
621
+ DO 171 I=1,LUNK
622
+ DO 170 J=1,MUNK
623
+ DO 169 K=1,NUNK
624
+ F(I,J,K) = F(I,J,K)-PERTRB
625
+ 169 CONTINUE
626
+ 170 CONTINUE
627
+ 171 CONTINUE
628
+ 172 CONTINUE
629
+ NPEROD = 0
630
+ IF (NBDCND .EQ. 0) GO TO 173
631
+ NPEROD = 1
632
+ W(1) = 0.
633
+ W(IWW-1) = 0.
634
+ 173 CONTINUE
635
+ CALL POIS3D (LBDCND,LUNK,C1,MBDCND,MUNK,C2,NPEROD,NUNK,W,W(IWB),
636
+ 1 W(IWC),LDIMF,MDIMF,F(LSTART,MSTART,NSTART),IR,W(IWW))
637
+ C
638
+ C FILL IN SIDES FOR PERIODIC BOUNDARY CONDITIONS.
639
+ C
640
+ IF (LP .NE. 1) GO TO 180
641
+ IF (MP .NE. 1) GO TO 175
642
+ DO 174 K=NSTART,NSTOP
643
+ F(1,MP1,K) = F(1,1,K)
644
+ 174 CONTINUE
645
+ MSTOP = MP1
646
+ 175 IF (NP .NE. 1) GO TO 177
647
+ DO 176 J=MSTART,MSTOP
648
+ F(1,J,NP1) = F(1,J,1)
649
+ 176 CONTINUE
650
+ NSTOP = NP1
651
+ 177 DO 179 J=MSTART,MSTOP
652
+ DO 178 K=NSTART,NSTOP
653
+ F(LP1,J,K) = F(1,J,K)
654
+ 178 CONTINUE
655
+ 179 CONTINUE
656
+ 180 CONTINUE
657
+ IF (MP .NE. 1) GO TO 185
658
+ IF (NP .NE. 1) GO TO 182
659
+ DO 181 I=LSTART,LSTOP
660
+ F(I,1,NP1) = F(I,1,1)
661
+ 181 CONTINUE
662
+ NSTOP = NP1
663
+ 182 DO 184 I=LSTART,LSTOP
664
+ DO 183 K=NSTART,NSTOP
665
+ F(I,MP1,K) = F(I,1,K)
666
+ 183 CONTINUE
667
+ 184 CONTINUE
668
+ 185 CONTINUE
669
+ IF (NP .NE. 1) GO TO 188
670
+ DO 187 I=LSTART,LSTOP
671
+ DO 186 J=MSTART,MSTOP
672
+ F(I,J,NP1) = F(I,J,1)
673
+ 186 CONTINUE
674
+ 187 CONTINUE
675
+ 188 CONTINUE
676
+ RETURN
677
+ C
678
+ C REVISION HISTORY---
679
+ C
680
+ C SEPTEMBER 1973 VERSION 1
681
+ C APRIL 1976 VERSION 2
682
+ C JANUARY 1978 VERSION 3
683
+ C DECEMBER 1979 VERSION 3.1
684
+ C FEBRUARY 1985 DOCUMENTATION UPGRADE
685
+ C NOVEMBER 1988 VERSION 3.2, FORTRAN 77 CHANGES
686
+ C-----------------------------------------------------------------------
687
+ END