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,683 @@
1
+ C
2
+ C file hstcsp.f
3
+ C
4
+ SUBROUTINE HSTCSP (INTL,A,B,M,MBDCND,BDA,BDB,C,D,N,NBDCND,BDC,
5
+ 1 BDD,ELMBDA,F,IDIMF,PERTRB,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 BDA(N),BDB(N),BDC(M),BDD(M),F(IDIMF,N),
40
+ C ARGUMENTS W(SEE ARGUMENT LIST)
41
+ C
42
+ C LATEST REVISION NOVEMBER 1988
43
+ C
44
+ C PURPOSE SOLVES THE STANDARD FIVE-POINT FINITE
45
+ C DIFFERENCE APPROXIMATION ON A STAGGERED
46
+ C GRID TO THE MODIFIED HELMHOLTZ EQUATION IN
47
+ C SPHERICAL COORDINATES ASSUMING AXISYMMETRY
48
+ C (NO DEPENDENCE ON LONGITUDE).
49
+ C
50
+ C THE EQUATION IS
51
+ C
52
+ C (1/R**2)(D/DR)(R**2(DU/DR)) +
53
+ C 1/(R**2*SIN(THETA))(D/DTHETA)
54
+ C (SIN(THETA)(DU/DTHETA)) +
55
+ C (LAMBDA/(R*SIN(THETA))**2)U = F(THETA,R)
56
+ C
57
+ C WHERE THETA IS COLATITUDE AND R IS THE
58
+ C RADIAL COORDINATE. THIS TWO-DIMENSIONAL
59
+ C MODIFIED HELMHOLTZ EQUATION RESULTS FROM
60
+ C THE FOURIER TRANSFORM OF THE THREE-
61
+ C DIMENSIONAL POISSON EQUATION.
62
+ C
63
+ C
64
+ C USAGE CALL HSTCSP (INTL,A,B,M,MBDCND,BDA,BDB,C,D,N,
65
+ C NBDCND,BDC,BDD,ELMBDA,F,IDIMF,
66
+ C PERTRB,IERROR,W)
67
+ C
68
+ C ARGUMENTS
69
+ C ON INPUT INTL
70
+ C
71
+ C = 0 ON INITIAL ENTRY TO HSTCSP OR IF ANY
72
+ C OF THE ARGUMENTS C, D, N, OR NBDCND
73
+ C ARE CHANGED FROM A PREVIOUS CALL
74
+ C
75
+ C = 1 IF C, D, N, AND NBDCND ARE ALL
76
+ C UNCHANGED FROM PREVIOUS CALL TO HSTCSP
77
+ C
78
+ C NOTE:
79
+ C A CALL WITH INTL = 0 TAKES APPROXIMATELY
80
+ C 1.5 TIMES AS MUCH TIME AS A CALL WITH
81
+ C INTL = 1. ONCE A CALL WITH INTL = 0
82
+ C HAS BEEN MADE THEN SUBSEQUENT SOLUTIONS
83
+ C CORRESPONDING TO DIFFERENT F, BDA, BDB,
84
+ C BDC, AND BDD CAN BE OBTAINED FASTER WITH
85
+ C INTL = 1 SINCE INITIALIZATION IS NOT
86
+ C REPEATED.
87
+ C
88
+ C A,B
89
+ C THE RANGE OF THETA (COLATITUDE),
90
+ C I.E. A .LE. THETA .LE. B. A
91
+ C MUST BE LESS THAN B AND A MUST BE
92
+ C NON-NEGATIVE. A AND B ARE IN RADIANS.
93
+ C A = 0 CORRESPONDS TO THE NORTH POLE AND
94
+ C B = PI CORRESPONDS TO THE SOUTH POLE.
95
+ C
96
+ C * * * IMPORTANT * * *
97
+ C
98
+ C IF B IS EQUAL TO PI, THEN B MUST BE
99
+ C COMPUTED USING THE STATEMENT
100
+ C B = PIMACH(DUM)
101
+ C THIS INSURES THAT B IN THE USER'S PROGRAM
102
+ C IS EQUAL TO PI IN THIS PROGRAM, PERMITTING
103
+ C SEVERAL TESTS OF THE INPUT PARAMETERS THAT
104
+ C OTHERWISE WOULD NOT BE POSSIBLE.
105
+ C
106
+ C * * * * * * * * * * * *
107
+ C
108
+ C M
109
+ C THE NUMBER OF GRID POINTS IN THE INTERVAL
110
+ C (A,B). THE GRID POINTS IN THE THETA-
111
+ C DIRECTION ARE GIVEN BY
112
+ C THETA(I) = A + (I-0.5)DTHETA
113
+ C FOR I=1,2,...,M WHERE DTHETA =(B-A)/M.
114
+ C M MUST BE GREATER THAN 4.
115
+ C
116
+ C MBDCND
117
+ C INDICATES THE TYPE OF BOUNDARY CONDITIONS
118
+ C AT THETA = A AND THETA = B.
119
+ C
120
+ C = 1 IF THE SOLUTION IS SPECIFIED AT
121
+ C THETA = A AND THETA = B.
122
+ C (SEE NOTES 1, 2 BELOW)
123
+ C
124
+ C = 2 IF THE SOLUTION IS SPECIFIED AT
125
+ C THETA = A AND THE DERIVATIVE OF THE
126
+ C SOLUTION WITH RESPECT TO THETA IS
127
+ C SPECIFIED AT THETA = B
128
+ C (SEE NOTES 1, 2 BELOW).
129
+ C
130
+ C = 3 IF THE DERIVATIVE OF THE SOLUTION
131
+ C WITH RESPECT TO THETA IS SPECIFIED
132
+ C AT THETA = A (SEE NOTES 1, 2 BELOW)
133
+ C AND THETA = B.
134
+ C
135
+ C = 4 IF THE DERIVATIVE OF THE SOLUTION
136
+ C WITH RESPECT TO THETA IS SPECIFIED AT
137
+ C THETA = A (SEE NOTES 1, 2 BELOW) AND
138
+ C THE SOLUTION IS SPECIFIED AT THETA = B.
139
+ C
140
+ C = 5 IF THE SOLUTION IS UNSPECIFIED AT
141
+ C THETA = A = 0 AND THE SOLUTION IS
142
+ C SPECIFIED AT THETA = B.
143
+ C (SEE NOTE 2 BELOW)
144
+ C
145
+ C = 6 IF THE SOLUTION IS UNSPECIFIED AT
146
+ C THETA = A = 0 AND THE DERIVATIVE OF
147
+ C THE SOLUTION WITH RESPECT TO THETA IS
148
+ C SPECIFIED AT THETA = B
149
+ C (SEE NOTE 2 BELOW).
150
+ C
151
+ C = 7 IF THE SOLUTION IS SPECIFIED AT
152
+ C THETA = A AND THE SOLUTION IS
153
+ C UNSPECIFIED AT THETA = B = PI.
154
+ C
155
+ C = 8 IF THE DERIVATIVE OF THE SOLUTION
156
+ C WITH RESPECT TO THETA IS SPECIFIED AT
157
+ C THETA = A (SEE NOTE 1 BELOW)
158
+ C AND THE SOLUTION IS UNSPECIFIED AT
159
+ C THETA = B = PI.
160
+ C
161
+ C = 9 IF THE SOLUTION IS UNSPECIFIED AT
162
+ C THETA = A = 0 AND THETA = B = PI.
163
+ C
164
+ C NOTE 1:
165
+ C IF A = 0, DO NOT USE MBDCND = 1,2,3,4,7
166
+ C OR 8, BUT INSTEAD USE MBDCND = 5, 6, OR 9.
167
+ C
168
+ C NOTE 2:
169
+ C IF B = PI, DO NOT USE MBDCND = 1,2,3,4,5,
170
+ C OR 6, BUT INSTEAD USE MBDCND = 7, 8, OR 9.
171
+ C
172
+ C NOTE 3:
173
+ C WHEN A = 0 AND/OR B = PI THE ONLY
174
+ C MEANINGFUL BOUNDARY CONDITION IS
175
+ C DU/DTHETA = 0. SEE D. GREENSPAN,
176
+ C 'NUMERICAL ANALYSIS OF ELLIPTIC
177
+ C BOUNDARY VALUE PROBLEMS,'
178
+ C HARPER AND ROW, 1965, CHAPTER 5.)
179
+ C
180
+ C BDA
181
+ C A ONE-DIMENSIONAL ARRAY OF LENGTH N THAT
182
+ C SPECIFIES THE BOUNDARY VALUES (IF ANY) OF
183
+ C THE SOLUTION AT THETA = A.
184
+ C
185
+ C WHEN MBDCND = 1, 2, OR 7,
186
+ C BDA(J) = U(A,R(J)), J=1,2,...,N.
187
+ C
188
+ C WHEN MBDCND = 3, 4, OR 8,
189
+ C BDA(J) = (D/DTHETA)U(A,R(J)), J=1,2,...,N.
190
+ C
191
+ C WHEN MBDCND HAS ANY OTHER VALUE, BDA IS A
192
+ C DUMMY VARIABLE.
193
+ C
194
+ C BDB
195
+ C A ONE-DIMENSIONAL ARRAY OF LENGTH N THAT
196
+ C SPECIFIES THE BOUNDARY VALUES OF THE
197
+ C SOLUTION AT THETA = B.
198
+ C
199
+ C WHEN MBDCND = 1, 4, OR 5,
200
+ C BDB(J) = U(B,R(J)), J=1,2,...,N.
201
+ C
202
+ C WHEN MBDCND = 2,3, OR 6,
203
+ C BDB(J) = (D/DTHETA)U(B,R(J)), J=1,2,...,N.
204
+ C
205
+ C WHEN MBDCND HAS ANY OTHER VALUE, BDB IS
206
+ C A DUMMY VARIABLE.
207
+ C
208
+ C C,D
209
+ C THE RANGE OF R , I.E. C .LE. R .LE. D.
210
+ C C MUST BE LESS THAN D AND NON-NEGATIVE.
211
+ C
212
+ C N
213
+ C THE NUMBER OF UNKNOWNS IN THE INTERVAL
214
+ C (C,D). THE UNKNOWNS IN THE R-DIRECTION
215
+ C ARE GIVEN BY R(J) = C + (J-0.5)DR,
216
+ C J=1,2,...,N, WHERE DR = (D-C)/N.
217
+ C N MUST BE GREATER THAN 4.
218
+ C
219
+ C NBDCND
220
+ C INDICATES THE TYPE OF BOUNDARY CONDITIONS
221
+ C AT R = C AND R = D.
222
+ C
223
+ C
224
+ C = 1 IF THE SOLUTION IS SPECIFIED AT
225
+ C R = C AND R = D.
226
+ C
227
+ C = 2 IF THE SOLUTION IS SPECIFIED AT
228
+ C R = C AND THE DERIVATIVE OF THE
229
+ C SOLUTION WITH RESPECT TO R IS
230
+ C SPECIFIED AT R = D. (SEE NOTE 1 BELOW)
231
+ C
232
+ C = 3 IF THE DERIVATIVE OF THE SOLUTION
233
+ C WITH RESPECT TO R IS SPECIFIED AT
234
+ C R = C AND R = D.
235
+ C
236
+ C = 4 IF THE DERIVATIVE OF THE SOLUTION
237
+ C WITH RESPECT TO R IS
238
+ C SPECIFIED AT R = C AND THE SOLUTION
239
+ C IS SPECIFIED AT R = D.
240
+ C
241
+ C = 5 IF THE SOLUTION IS UNSPECIFIED AT
242
+ C R = C = 0 (SEE NOTE 2 BELOW) AND THE
243
+ C SOLUTION IS SPECIFIED AT R = D.
244
+ C
245
+ C = 6 IF THE SOLUTION IS UNSPECIFIED AT
246
+ C R = C = 0 (SEE NOTE 2 BELOW)
247
+ C AND THE DERIVATIVE OF THE SOLUTION
248
+ C WITH RESPECT TO R IS SPECIFIED AT
249
+ C R = D.
250
+ C
251
+ C NOTE 1:
252
+ C IF C = 0 AND MBDCND = 3,6,8 OR 9, THE
253
+ C SYSTEM OF EQUATIONS TO BE SOLVED IS
254
+ C SINGULAR. THE UNIQUE SOLUTION IS
255
+ C DETERMINED BY EXTRAPOLATION TO THE
256
+ C SPECIFICATION OF U(THETA(1),C).
257
+ C BUT IN THESE CASES THE RIGHT SIDE OF THE
258
+ C SYSTEM WILL BE PERTURBED BY THE CONSTANT
259
+ C PERTRB.
260
+ C
261
+ C NOTE 2:
262
+ C NBDCND = 5 OR 6 CANNOT BE USED WITH
263
+ C MBDCND =1, 2, 4, 5, OR 7
264
+ C (THE FORMER INDICATES THAT THE SOLUTION IS
265
+ C UNSPECIFIED AT R = 0; THE LATTER INDICATES
266
+ C SOLUTION IS SPECIFIED).
267
+ C USE INSTEAD NBDCND = 1 OR 2.
268
+ C
269
+ C BDC
270
+ C A ONE DIMENSIONAL ARRAY OF LENGTH M THAT
271
+ C SPECIFIES THE BOUNDARY VALUES OF THE
272
+ C SOLUTION AT R = C. WHEN NBDCND = 1 OR 2,
273
+ C BDC(I) = U(THETA(I),C), I=1,2,...,M.
274
+ C
275
+ C WHEN NBDCND = 3 OR 4,
276
+ C BDC(I) = (D/DR)U(THETA(I),C), I=1,2,...,M.
277
+ C
278
+ C WHEN NBDCND HAS ANY OTHER VALUE, BDC IS
279
+ C A DUMMY VARIABLE.
280
+ C
281
+ C BDD
282
+ C A ONE-DIMENSIONAL ARRAY OF LENGTH M THAT
283
+ C SPECIFIES THE BOUNDARY VALUES OF THE
284
+ C SOLUTION AT R = D. WHEN NBDCND = 1 OR 4,
285
+ C BDD(I) = U(THETA(I),D) , I=1,2,...,M.
286
+ C
287
+ C WHEN NBDCND = 2 OR 3,
288
+ C BDD(I) = (D/DR)U(THETA(I),D), I=1,2,...,M.
289
+ C
290
+ C WHEN NBDCND HAS ANY OTHER VALUE, BDD IS
291
+ C A DUMMY VARIABLE.
292
+ C
293
+ C ELMBDA
294
+ C THE CONSTANT LAMBDA IN THE MODIFIED
295
+ C HELMHOLTZ EQUATION. IF LAMBDA IS GREATER
296
+ C THAN 0, A SOLUTION MAY NOT EXIST.
297
+ C HOWEVER, HSTCSP WILL ATTEMPT TO FIND A
298
+ C SOLUTION.
299
+ C
300
+ C F
301
+ C A TWO-DIMENSIONAL ARRAY THAT SPECIFIES THE
302
+ C VALUES OF THE RIGHT SIDE OF THE MODIFIED
303
+ C HELMHOLTZ EQUATION. FOR I=1,2,...,M AND
304
+ C J=1,2,...,N
305
+ C
306
+ C F(I,J) = F(THETA(I),R(J)) .
307
+ C
308
+ C F MUST BE DIMENSIONED AT LEAST M X N.
309
+ C
310
+ C IDIMF
311
+ C THE ROW (OR FIRST) DIMENSION OF THE ARRAY
312
+ C F AS IT APPEARS IN THE PROGRAM CALLING
313
+ C HSTCSP. THIS PARAMETER IS USED TO SPECIFY
314
+ C THE VARIABLE DIMENSION OF F.
315
+ C IDIMF MUST BE AT LEAST M.
316
+ C
317
+ C W
318
+ C A ONE-DIMENSIONAL ARRAY THAT MUST BE
319
+ C PROVIDED BY THE USER FOR WORK SPACE.
320
+ C WITH K = INT(LOG2(N))+1 AND L = 2**(K+1),
321
+ C W MAY REQUIRE UP TO
322
+ C (K-2)*L+K+MAX(2N,6M)+4(N+M)+5 LOCATIONS.
323
+ C THE ACTUAL NUMBER OF LOCATIONS USED IS
324
+ C COMPUTED BY HSTCSP AND IS RETURNED IN THE
325
+ C LOCATION W(1).
326
+ C
327
+ C
328
+ C ON OUTPUT F
329
+ C CONTAINS THE SOLUTION U(I,J) OF THE FINITE
330
+ C DIFFERENCE APPROXIMATION FOR THE GRID POINT
331
+ C (THETA(I),R(J)) FOR I=1,2,..,M, J=1,2,...,N.
332
+ C
333
+ C PERTRB
334
+ C IF A COMBINATION OF PERIODIC, DERIVATIVE,
335
+ C OR UNSPECIFIED BOUNDARY CONDITIONS IS
336
+ C SPECIFIED FOR A POISSON EQUATION
337
+ C (LAMBDA = 0), A SOLUTION MAY NOT EXIST.
338
+ C PERTRB IS A CONSTANT, CALCULATED AND
339
+ C SUBTRACTED FROM F, WHICH ENSURES THAT A
340
+ C SOLUTION EXISTS. HSTCSP THEN COMPUTES THIS
341
+ C SOLUTION, WHICH IS A LEAST SQUARES SOLUTION
342
+ C TO THE ORIGINAL APPROXIMATION.
343
+ C THIS SOLUTION PLUS ANY CONSTANT IS ALSO
344
+ C A SOLUTION; HENCE, THE SOLUTION IS NOT
345
+ C UNIQUE. THE VALUE OF PERTRB SHOULD BE
346
+ C SMALL COMPARED TO THE RIGHT SIDE F.
347
+ C OTHERWISE, A SOLUTION IS OBTAINED TO AN
348
+ C ESSENTIALLY DIFFERENT PROBLEM.
349
+ C THIS COMPARISON SHOULD ALWAYS BE MADE TO
350
+ C INSURE THAT A MEANINGFUL SOLUTION HAS BEEN
351
+ C OBTAINED.
352
+ C
353
+ C IERROR
354
+ C AN ERROR FLAG THAT INDICATES INVALID INPUT
355
+ C PARAMETERS. EXCEPT FOR NUMBERS 0 AND 10,
356
+ C A SOLUTION IS NOT ATTEMPTED.
357
+ C
358
+ C = 0 NO ERROR
359
+ C
360
+ C = 1 A .LT. 0 OR B .GT. PI
361
+ C
362
+ C = 2 A .GE. B
363
+ C
364
+ C = 3 MBDCND .LT. 1 OR MBDCND .GT. 9
365
+ C
366
+ C = 4 C .LT. 0
367
+ C
368
+ C = 5 C .GE. D
369
+ C
370
+ C = 6 NBDCND .LT. 1 OR NBDCND .GT. 6
371
+ C
372
+ C = 7 N .LT. 5
373
+ C
374
+ C = 8 NBDCND = 5 OR 6 AND
375
+ C MBDCND = 1, 2, 4, 5, OR 7
376
+ C
377
+ C = 9 C .GT. 0 AND NBDCND .GE. 5
378
+ C
379
+ C = 10 ELMBDA .GT. 0
380
+ C
381
+ C = 11 IDIMF .LT. M
382
+ C
383
+ C = 12 M .LT. 5
384
+ C
385
+ C = 13 A = 0 AND MBDCND =1,2,3,4,7 OR 8
386
+ C
387
+ C = 14 B = PI AND MBDCND .LE. 6
388
+ C
389
+ C = 15 A .GT. 0 AND MBDCND = 5, 6, OR 9
390
+ C
391
+ C = 16 B .LT. PI AND MBDCND .GE. 7
392
+ C
393
+ C = 17 LAMBDA .NE. 0 AND NBDCND .GE. 5
394
+ C
395
+ C SINCE THIS IS THE ONLY MEANS OF INDICATING
396
+ C A POSSIBLY INCORRECT CALL TO HSTCSP,
397
+ C THE USER SHOULD TEST IERROR AFTER THE CALL.
398
+ C
399
+ C W
400
+ C W(1) CONTAINS THE REQUIRED LENGTH OF W.
401
+ C ALSO W CONTAINS INTERMEDIATE VALUES THAT
402
+ C MUST NOT BE DESTROYED IF HSTCSP WILL BE
403
+ C CALLED AGAIN WITH INTL = 1.
404
+ C
405
+ C I/O NONE
406
+ C
407
+ C PRECISION SINGLE
408
+ C
409
+ C REQUIRED LIBRARY BLKTRI AND COMF FROM FISHPACK
410
+ C FILES
411
+ C
412
+ C LANGUAGE FORTRAN
413
+ C
414
+ C HISTORY WRITTEN BY ROLAND SWEET AT NCAR IN 1977.
415
+ C RELEASED ON NCAR'S PUBLIC SOFTWARE LIBRARIES
416
+ C IN JANUARY 1980.
417
+ C
418
+ C PORTABILITY FORTRAN 77
419
+ C
420
+ C ALGORITHM THIS SUBROUTINE DEFINES THE FINITE-DIFFERENCE
421
+ C EQUATIONS, INCORPORATES BOUNDARY DATA, ADJUSTS
422
+ C THE RIGHT SIDE WHEN THE SYSTEM IS SINGULAR
423
+ C AND CALLS BLKTRI WHICH SOLVES THE LINEAR
424
+ C SYSTEM OF EQUATIONS.
425
+ C
426
+ C
427
+ C TIMING FOR LARGE M AND N, THE OPERATION COUNT IS
428
+ C ROUGHLY PROPORTIONAL TO M*N*LOG2(N). THE
429
+ C TIMING ALSO DEPENDS ON INPUT PARAMETER INTL.
430
+ C
431
+ C ACCURACY THE SOLUTION PROCESS EMPLOYED RESULTS IN
432
+ C A LOSS OF NO MORE THAN FOUR SIGNIFICANT
433
+ C DIGITS FOR N AND M AS LARGE AS 64.
434
+ C MORE DETAILED INFORMATION ABOUT ACCURACY
435
+ C CAN BE FOUND IN THE DOCUMENTATION FOR
436
+ C SUBROUTINE BLKTRI WHICH IS THE ROUTINE
437
+ C SOLVES THE FINITE DIFFERENCE EQUATIONS.
438
+ C
439
+ C REFERENCES P.N. SWARZTRAUBER, "A DIRECT METHOD FOR
440
+ C THE DISCRETE SOLUTION OF SEPARABLE ELLIPTIC
441
+ C EQUATIONS",
442
+ C SIAM J. NUMER. ANAL. 11(1974), PP. 1136-1150.
443
+ C
444
+ C U. SCHUMANN AND R. SWEET, "A DIRECT METHOD FOR
445
+ C THE SOLUTION OF POISSON'S EQUATION WITH NEUMANN
446
+ C BOUNDARY CONDITIONS ON A STAGGERED GRID OF
447
+ C ARBITRARY SIZE," J. COMP. PHYS. 20(1976),
448
+ C PP. 171-182.
449
+ C***********************************************************************
450
+ DIMENSION F(IDIMF,1) ,BDA(*) ,BDB(*) ,BDC(*) ,
451
+ 1 BDD(*) ,W(*)
452
+ C
453
+ PI = PIMACH(DUM)
454
+ C
455
+ C CHECK FOR INVALID INPUT PARAMETERS
456
+ C
457
+ IERROR = 0
458
+ IF (A.LT.0. .OR. B.GT.PI) IERROR = 1
459
+ IF (A .GE. B) IERROR = 2
460
+ IF (MBDCND.LT.1 .OR. MBDCND.GT.9) IERROR = 3
461
+ IF (C .LT. 0.) IERROR = 4
462
+ IF (C .GE. D) IERROR = 5
463
+ IF (NBDCND.LT.1 .OR. NBDCND.GT.6) IERROR = 6
464
+ IF (N .LT. 5) IERROR = 7
465
+ IF ((NBDCND.EQ.5 .OR. NBDCND.EQ.6) .AND. (MBDCND.EQ.1 .OR.
466
+ 1 MBDCND.EQ.2 .OR. MBDCND.EQ.4 .OR. MBDCND.EQ.5 .OR.
467
+ 2 MBDCND.EQ.7))
468
+ 3 IERROR = 8
469
+ IF (C.GT.0. .AND. NBDCND.GE.5) IERROR = 9
470
+ IF (IDIMF .LT. M) IERROR = 11
471
+ IF (M .LT. 5) IERROR = 12
472
+ IF (A.EQ.0. .AND. MBDCND.NE.5 .AND. MBDCND.NE.6 .AND. MBDCND.NE.9)
473
+ 1 IERROR = 13
474
+ IF (B.EQ.PI .AND. MBDCND.LE.6) IERROR = 14
475
+ IF (A.GT.0. .AND. (MBDCND.EQ.5 .OR. MBDCND.EQ.6 .OR. MBDCND.EQ.9))
476
+ 1 IERROR = 15
477
+ IF (B.LT.PI .AND. MBDCND.GE.7) IERROR = 16
478
+ IF (ELMBDA.NE.0. .AND. NBDCND.GE.5) IERROR = 17
479
+ IF (IERROR .NE. 0) GO TO 101
480
+ IWBM = M+1
481
+ IWCM = IWBM+M
482
+ IWAN = IWCM+M
483
+ IWBN = IWAN+N
484
+ IWCN = IWBN+N
485
+ IWSNTH = IWCN+N
486
+ IWRSQ = IWSNTH+M
487
+ IWWRK = IWRSQ+N
488
+ IERR1 = 0
489
+ CALL HSTCS1 (INTL,A,B,M,MBDCND,BDA,BDB,C,D,N,NBDCND,BDC,BDD,
490
+ 1 ELMBDA,F,IDIMF,PERTRB,IERR1,W,W(IWBM),W(IWCM),
491
+ 2 W(IWAN),W(IWBN),W(IWCN),W(IWSNTH),W(IWRSQ),W(IWWRK))
492
+ W(1) = W(IWWRK)+FLOAT(IWWRK-1)
493
+ IERROR = IERR1
494
+ 101 CONTINUE
495
+ RETURN
496
+ END
497
+ SUBROUTINE HSTCS1 (INTL,A,B,M,MBDCND,BDA,BDB,C,D,N,NBDCND,BDC,
498
+ 1 BDD,ELMBDA,F,IDIMF,PERTRB,IERR1,AM,BM,CM,AN,
499
+ 2 BN,CN,SNTH,RSQ,WRK)
500
+ DIMENSION BDA(*) ,BDB(*) ,BDC(*) ,BDD(*) ,
501
+ 1 F(IDIMF,1) ,AM(*) ,BM(*) ,CM(*) ,
502
+ 2 AN(*) ,BN(*) ,CN(*) ,SNTH(*) ,
503
+ 3 RSQ(*) ,WRK(*)
504
+ DTH = (B-A)/FLOAT(M)
505
+ DTHSQ = DTH*DTH
506
+ DO 101 I=1,M
507
+ SNTH(I) = SIN(A+(FLOAT(I)-0.5)*DTH)
508
+ 101 CONTINUE
509
+ DR = (D-C)/FLOAT(N)
510
+ DO 102 J=1,N
511
+ RSQ(J) = (C+(FLOAT(J)-0.5)*DR)**2
512
+ 102 CONTINUE
513
+ C
514
+ C MULTIPLY RIGHT SIDE BY R(J)**2
515
+ C
516
+ DO 104 J=1,N
517
+ X = RSQ(J)
518
+ DO 103 I=1,M
519
+ F(I,J) = X*F(I,J)
520
+ 103 CONTINUE
521
+ 104 CONTINUE
522
+ C
523
+ C DEFINE COEFFICIENTS AM,BM,CM
524
+ C
525
+ X = 1./(2.*COS(DTH/2.))
526
+ DO 105 I=2,M
527
+ AM(I) = (SNTH(I-1)+SNTH(I))*X
528
+ CM(I-1) = AM(I)
529
+ 105 CONTINUE
530
+ AM(1) = SIN(A)
531
+ CM(M) = SIN(B)
532
+ DO 106 I=1,M
533
+ X = 1./SNTH(I)
534
+ Y = X/DTHSQ
535
+ AM(I) = AM(I)*Y
536
+ CM(I) = CM(I)*Y
537
+ BM(I) = ELMBDA*X*X-AM(I)-CM(I)
538
+ 106 CONTINUE
539
+ C
540
+ C DEFINE COEFFICIENTS AN,BN,CN
541
+ C
542
+ X = C/DR
543
+ DO 107 J=1,N
544
+ AN(J) = (X+FLOAT(J-1))**2
545
+ CN(J) = (X+FLOAT(J))**2
546
+ BN(J) = -(AN(J)+CN(J))
547
+ 107 CONTINUE
548
+ ISW = 1
549
+ NB = NBDCND
550
+ IF (C.EQ.0. .AND. NB.EQ.2) NB = 6
551
+ C
552
+ C ENTER DATA ON THETA BOUNDARIES
553
+ C
554
+ GO TO (108,108,110,110,112,112,108,110,112),MBDCND
555
+ 108 BM(1) = BM(1)-AM(1)
556
+ X = 2.*AM(1)
557
+ DO 109 J=1,N
558
+ F(1,J) = F(1,J)-X*BDA(J)
559
+ 109 CONTINUE
560
+ GO TO 112
561
+ 110 BM(1) = BM(1)+AM(1)
562
+ X = DTH*AM(1)
563
+ DO 111 J=1,N
564
+ F(1,J) = F(1,J)+X*BDA(J)
565
+ 111 CONTINUE
566
+ 112 CONTINUE
567
+ GO TO (113,115,115,113,113,115,117,117,117),MBDCND
568
+ 113 BM(M) = BM(M)-CM(M)
569
+ X = 2.*CM(M)
570
+ DO 114 J=1,N
571
+ F(M,J) = F(M,J)-X*BDB(J)
572
+ 114 CONTINUE
573
+ GO TO 117
574
+ 115 BM(M) = BM(M)+CM(M)
575
+ X = DTH*CM(M)
576
+ DO 116 J=1,N
577
+ F(M,J) = F(M,J)-X*BDB(J)
578
+ 116 CONTINUE
579
+ 117 CONTINUE
580
+ C
581
+ C ENTER DATA ON R BOUNDARIES
582
+ C
583
+ GO TO (118,118,120,120,122,122),NB
584
+ 118 BN(1) = BN(1)-AN(1)
585
+ X = 2.*AN(1)
586
+ DO 119 I=1,M
587
+ F(I,1) = F(I,1)-X*BDC(I)
588
+ 119 CONTINUE
589
+ GO TO 122
590
+ 120 BN(1) = BN(1)+AN(1)
591
+ X = DR*AN(1)
592
+ DO 121 I=1,M
593
+ F(I,1) = F(I,1)+X*BDC(I)
594
+ 121 CONTINUE
595
+ 122 CONTINUE
596
+ GO TO (123,125,125,123,123,125),NB
597
+ 123 BN(N) = BN(N)-CN(N)
598
+ X = 2.*CN(N)
599
+ DO 124 I=1,M
600
+ F(I,N) = F(I,N)-X*BDD(I)
601
+ 124 CONTINUE
602
+ GO TO 127
603
+ 125 BN(N) = BN(N)+CN(N)
604
+ X = DR*CN(N)
605
+ DO 126 I=1,M
606
+ F(I,N) = F(I,N)-X*BDD(I)
607
+ 126 CONTINUE
608
+ 127 CONTINUE
609
+ C
610
+ C CHECK FOR SINGULAR PROBLEM. IF SINGULAR, PERTURB F.
611
+ C
612
+ PERTRB = 0.
613
+ GO TO (137,137,128,137,137,128,137,128,128),MBDCND
614
+ 128 GO TO (137,137,129,137,137,129),NB
615
+ 129 IF (ELMBDA) 137,131,130
616
+ 130 IERR1 = 10
617
+ GO TO 137
618
+ 131 CONTINUE
619
+ ISW = 2
620
+ DO 133 I=1,M
621
+ X = 0.
622
+ DO 132 J=1,N
623
+ X = X+F(I,J)
624
+ 132 CONTINUE
625
+ PERTRB = PERTRB+X*SNTH(I)
626
+ 133 CONTINUE
627
+ X = 0.
628
+ DO 134 J=1,N
629
+ X = X+RSQ(J)
630
+ 134 CONTINUE
631
+ PERTRB = 2.*(PERTRB*SIN(DTH/2.))/(X*(COS(A)-COS(B)))
632
+ DO 136 J=1,N
633
+ X = RSQ(J)*PERTRB
634
+ DO 135 I=1,M
635
+ F(I,J) = F(I,J)-X
636
+ 135 CONTINUE
637
+ 136 CONTINUE
638
+ 137 CONTINUE
639
+ A2 = 0.
640
+ DO 138 I=1,M
641
+ A2 = A2+F(I,1)
642
+ 138 CONTINUE
643
+ A2 = A2/RSQ(1)
644
+ C
645
+ C INITIALIZE BLKTRI
646
+ C
647
+ IF (INTL .NE. 0) GO TO 139
648
+ CALL BLKTRI (0,1,N,AN,BN,CN,1,M,AM,BM,CM,IDIMF,F,IERR1,WRK)
649
+ 139 CONTINUE
650
+ C
651
+ C CALL BLKTRI TO SOLVE SYSTEM OF EQUATIONS.
652
+ C
653
+ CALL BLKTRI (1,1,N,AN,BN,CN,1,M,AM,BM,CM,IDIMF,F,IERR1,WRK)
654
+ IF (ISW.NE.2 .OR. C.NE.0. .OR. NBDCND.NE.2) GO TO 143
655
+ A1 = 0.
656
+ A3 = 0.
657
+ DO 140 I=1,M
658
+ A1 = A1+SNTH(I)*F(I,1)
659
+ A3 = A3+SNTH(I)
660
+ 140 CONTINUE
661
+ A1 = A1+RSQ(1)*A2/2.
662
+ IF (MBDCND .EQ. 3)
663
+ 1 A1 = A1+(SIN(B)*BDB(1)-SIN(A)*BDA(1))/(2.*(B-A))
664
+ A1 = A1/A3
665
+ A1 = BDC(1)-A1
666
+ DO 142 I=1,M
667
+ DO 141 J=1,N
668
+ F(I,J) = F(I,J)+A1
669
+ 141 CONTINUE
670
+ 142 CONTINUE
671
+ 143 CONTINUE
672
+ RETURN
673
+ C
674
+ C REVISION HISTORY---
675
+ C
676
+ C SEPTEMBER 1973 VERSION 1
677
+ C APRIL 1976 VERSION 2
678
+ C JANUARY 1978 VERSION 3
679
+ C DECEMBER 1979 VERSION 3.1
680
+ C FEBRUARY 1985 DOCUMENTATION UPGRADE
681
+ C NOVEMBER 1988 VERSION 3.2, FORTRAN 77 CHANGES
682
+ C-----------------------------------------------------------------------
683
+ END