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,728 @@
1
+ C
2
+ C file hwscsp.f
3
+ C
4
+ SUBROUTINE HWSCSP (INTL,TS,TF,M,MBDCND,BDTS,BDTF,RS,RF,N,NBDCND,
5
+ 1 BDRS,BDRF,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 BDTS(N+1), BDTF(N+1), BDRS(M+1), BDRF(M+1),
40
+ C ARGUMENTS F(IDIMF,N+1), W(SEE ARGUMENT LIST)
41
+ C
42
+ C LATEST REVISION NOVEMBER 1988
43
+ C
44
+ C PURPOSE SOLVES A FINITE DIFFERENCE APPROXIMATION
45
+ C TO THE MODIFIED HELMHOLTZ EQUATION IN
46
+ C SPHERICAL COORDINATES ASSUMING AXISYMMETRY
47
+ C (NO DEPENDENCE ON LONGITUDE). THE EQUATION
48
+ C IS
49
+ C
50
+ C (1/R**2)(D/DR)((R**2)(D/DR)U) +
51
+ C
52
+ C (1/(R**2)SIN(THETA))(D/DTHETA)
53
+ C
54
+ C (SIN(THETA)(D/DTHETA)U) +
55
+ C
56
+ C (LAMBDA/(RSIN(THETA))**2)U = F(THETA,R).
57
+ C
58
+ C THIS TWO DIMENSIONAL MODIFIED HELMHOLTZ
59
+ C EQUATION RESULTS FROM THE FOURIER TRANSFORM
60
+ C OF THE THREE DIMENSIONAL POISSON EQUATION.
61
+ C
62
+ C USAGE CALL HWSCSP (INTL,TS,TF,M,MBDCND,BDTS,BDTF,
63
+ C RS,RF,N,NBDCND,BDRS,BDRF,ELMBDA,
64
+ C F,IDIMF,PERTRB,IERROR,W)
65
+ C
66
+ C ARGUMENTS
67
+ C ON INPUT INTL
68
+ C = 0 ON INITIAL ENTRY TO HWSCSP OR IF ANY
69
+ C OF THE ARGUMENTS RS, RF, N, NBDCND
70
+ C ARE CHANGED FROM A PREVIOUS CALL.
71
+ C = 1 IF RS, RF, N, NBDCND ARE ALL UNCHANGED
72
+ C FROM PREVIOUS CALL TO HWSCSP.
73
+ C
74
+ C NOTE:
75
+ C A CALL WITH INTL=0 TAKES APPROXIMATELY
76
+ C 1.5 TIMES AS MUCH TIME AS A CALL WITH
77
+ C INTL = 1 . ONCE A CALL WITH INTL = 0
78
+ C HAS BEEN MADE THEN SUBSEQUENT SOLUTIONS
79
+ C CORRESPONDING TO DIFFERENT F, BDTS, BDTF,
80
+ C BDRS, BDRF CAN BE OBTAINED FASTER WITH
81
+ C INTL = 1 SINCE INITIALIZATION IS NOT
82
+ C REPEATED.
83
+ C
84
+ C TS,TF
85
+ C THE RANGE OF THETA (COLATITUDE), I.E.,
86
+ C TS .LE. THETA .LE. TF. TS MUST BE LESS
87
+ C THAN TF. TS AND TF ARE IN RADIANS. A TS OF
88
+ C ZERO CORRESPONDS TO THE NORTH POLE AND A
89
+ C TF OF PI CORRESPONDS TO THE SOUTH POLE.
90
+ C
91
+ C **** IMPORTANT ****
92
+ C
93
+ C IF TF IS EQUAL TO PI THEN IT MUST BE
94
+ C COMPUTED USING THE STATEMENT
95
+ C TF = PIMACH(DUM). THIS INSURES THAT TF
96
+ C IN THE USER'S PROGRAM IS EQUAL TO PI IN
97
+ C THIS PROGRAM WHICH PERMITS SEVERAL TESTS
98
+ C OF THE INPUT PARAMETERS THAT OTHERWISE
99
+ C WOULD NOT BE POSSIBLE.
100
+ C
101
+ C M
102
+ C THE NUMBER OF PANELS INTO WHICH THE
103
+ C INTERVAL (TS,TF) IS SUBDIVIDED.
104
+ C HENCE, THERE WILL BE M+1 GRID POINTS
105
+ C IN THE THETA-DIRECTION GIVEN BY
106
+ C THETA(K) = (I-1)DTHETA+TS FOR
107
+ C I = 1,2,...,M+1, WHERE DTHETA = (TF-TS)/M
108
+ C IS THE PANEL WIDTH.
109
+ C
110
+ C MBDCND
111
+ C INDICATES THE TYPE OF BOUNDARY CONDITION
112
+ C AT THETA = TS AND THETA = TF.
113
+ C
114
+ C = 1 IF THE SOLUTION IS SPECIFIED AT
115
+ C THETA = TS AND THETA = TF.
116
+ C = 2 IF THE SOLUTION IS SPECIFIED AT
117
+ C THETA = TS AND THE DERIVATIVE OF THE
118
+ C SOLUTION WITH RESPECT TO THETA IS
119
+ C SPECIFIED AT THETA = TF
120
+ C (SEE NOTE 2 BELOW).
121
+ C = 3 IF THE DERIVATIVE OF THE SOLUTION
122
+ C WITH RESPECT TO THETA IS SPECIFIED
123
+ C AT THETA = TS AND THETA = TF
124
+ C (SEE NOTES 1,2 BELOW).
125
+ C = 4 IF THE DERIVATIVE OF THE SOLUTION
126
+ C WITH RESPECT TO THETA IS SPECIFIED
127
+ C AT THETA = TS (SEE NOTE 1 BELOW) AND
128
+ C SOLUTION IS SPECIFIED AT THETA = TF.
129
+ C = 5 IF THE SOLUTION IS UNSPECIFIED AT
130
+ C THETA = TS = 0 AND THE SOLUTION IS
131
+ C SPECIFIED AT THETA = TF.
132
+ C = 6 IF THE SOLUTION IS UNSPECIFIED AT
133
+ C THETA = TS = 0 AND THE DERIVATIVE
134
+ C OF THE SOLUTION WITH RESPECT TO THETA
135
+ C IS SPECIFIED AT THETA = TF
136
+ C (SEE NOTE 2 BELOW).
137
+ C = 7 IF THE SOLUTION IS SPECIFIED AT
138
+ C THETA = TS AND THE SOLUTION IS
139
+ C UNSPECIFIED AT THETA = TF = PI.
140
+ C = 8 IF THE DERIVATIVE OF THE SOLUTION
141
+ C WITH RESPECT TO THETA IS SPECIFIED
142
+ C AT THETA = TS (SEE NOTE 1 BELOW)
143
+ C AND THE SOLUTION IS UNSPECIFIED AT
144
+ C THETA = TF = PI.
145
+ C = 9 IF THE SOLUTION IS UNSPECIFIED AT
146
+ C THETA = TS = 0 AND THETA = TF = PI.
147
+ C
148
+ C NOTE 1:
149
+ C IF TS = 0, DO NOT USE MBDCND = 3,4, OR 8,
150
+ C BUT INSTEAD USE MBDCND = 5,6, OR 9 .
151
+ C
152
+ C NOTE 2:
153
+ C IF TF = PI, DO NOT USE MBDCND = 2,3, OR 6,
154
+ C BUT INSTEAD USE MBDCND = 7,8, OR 9 .
155
+ C
156
+ C BDTS
157
+ C A ONE-DIMENSIONAL ARRAY OF LENGTH N+1 THAT
158
+ C SPECIFIES THE VALUES OF THE DERIVATIVE OF
159
+ C THE SOLUTION WITH RESPECT TO THETA AT
160
+ C THETA = TS. WHEN MBDCND = 3,4, OR 8,
161
+ C
162
+ C BDTS(J) = (D/DTHETA)U(TS,R(J)),
163
+ C J = 1,2,...,N+1 .
164
+ C
165
+ C WHEN MBDCND HAS ANY OTHER VALUE, BDTS IS
166
+ C A DUMMY VARIABLE.
167
+ C
168
+ C BDTF
169
+ C A ONE-DIMENSIONAL ARRAY OF LENGTH N+1 THAT
170
+ C SPECIFIES THE VALUES OF THE DERIVATIVE OF
171
+ C THE SOLUTION WITH RESPECT TO THETA AT
172
+ C THETA = TF. WHEN MBDCND = 2,3, OR 6,
173
+ C
174
+ C BDTF(J) = (D/DTHETA)U(TF,R(J)),
175
+ C J = 1,2,...,N+1 .
176
+ C
177
+ C WHEN MBDCND HAS ANY OTHER VALUE, BDTF IS
178
+ C A DUMMY VARIABLE.
179
+ C
180
+ C RS,RF
181
+ C THE RANGE OF R, I.E., RS .LE. R .LT. RF.
182
+ C RS MUST BE LESS THAN RF. RS MUST BE
183
+ C NON-NEGATIVE.
184
+ C
185
+ C N
186
+ C THE NUMBER OF PANELS INTO WHICH THE
187
+ C INTERVAL (RS,RF) IS SUBDIVIDED.
188
+ C HENCE, THERE WILL BE N+1 GRID POINTS IN THE
189
+ C R-DIRECTION GIVEN BY R(J) = (J-1)DR+RS
190
+ C FOR J = 1,2,...,N+1, WHERE DR = (RF-RS)/N
191
+ C IS THE PANEL WIDTH.
192
+ C N MUST BE GREATER THAN 2
193
+ C
194
+ C NBDCND
195
+ C INDICATES THE TYPE OF BOUNDARY CONDITION
196
+ C AT R = RS AND R = RF.
197
+ C
198
+ C = 1 IF THE SOLUTION IS SPECIFIED AT
199
+ C R = RS AND R = RF.
200
+ C = 2 IF THE SOLUTION IS SPECIFIED AT
201
+ C R = RS AND THE DERIVATIVE
202
+ C OF THE SOLUTION WITH RESPECT TO R
203
+ C IS SPECIFIED AT R = RF.
204
+ C = 3 IF THE DERIVATIVE OF THE SOLUTION
205
+ C WITH RESPECT TO R IS SPECIFIED AT
206
+ C R = RS AND R = RF.
207
+ C = 4 IF THE DERIVATIVE OF THE SOLUTION
208
+ C WITH RESPECT TO R IS SPECIFIED AT
209
+ C RS AND THE SOLUTION IS SPECIFIED AT
210
+ C R = RF.
211
+ C = 5 IF THE SOLUTION IS UNSPECIFIED AT
212
+ C R = RS = 0 (SEE NOTE BELOW) AND THE
213
+ C SOLUTION IS SPECIFIED AT R = RF.
214
+ C = 6 IF THE SOLUTION IS UNSPECIFIED AT
215
+ C R = RS = 0 (SEE NOTE BELOW) AND THE
216
+ C DERIVATIVE OF THE SOLUTION WITH
217
+ C RESPECT TO R IS SPECIFIED AT R = RF.
218
+ C
219
+ C NOTE:
220
+ C NBDCND = 5 OR 6 CANNOT BE USED WITH
221
+ C MBDCND = 1,2,4,5, OR 7. THE FORMER
222
+ C INDICATES THAT THE SOLUTION IS UNSPECIFIED
223
+ C AT R = 0, THE LATTER INDICATES THAT THE
224
+ C SOLUTION IS SPECIFIED).
225
+ C USE INSTEAD NBDCND = 1 OR 2 .
226
+ C
227
+ C BDRS
228
+ C A ONE-DIMENSIONAL ARRAY OF LENGTH M+1 THAT
229
+ C SPECIFIES THE VALUES OF THE DERIVATIVE OF
230
+ C THE SOLUTION WITH RESPECT TO R AT R = RS.
231
+ C
232
+ C WHEN NBDCND = 3 OR 4,
233
+ C BDRS(I) = (D/DR)U(THETA(I),RS),
234
+ C I = 1,2,...,M+1 .
235
+ C
236
+ C WHEN NBDCND HAS ANY OTHER VALUE, BDRS IS
237
+ C A DUMMY VARIABLE.
238
+ C
239
+ C BDRF
240
+ C A ONE-DIMENSIONAL ARRAY OF LENGTH M+1
241
+ C THAT SPECIFIES THE VALUES OF THE
242
+ C DERIVATIVE OF THE SOLUTION WITH RESPECT
243
+ C TO R AT R = RF.
244
+ C
245
+ C WHEN NBDCND = 2,3, OR 6,
246
+ C BDRF(I) = (D/DR)U(THETA(I),RF),
247
+ C I = 1,2,...,M+1 .
248
+ C
249
+ C WHEN NBDCND HAS ANY OTHER VALUE, BDRF IS
250
+ C A DUMMY VARIABLE.
251
+ C
252
+ C ELMBDA
253
+ C THE CONSTANT LAMBDA IN THE HELMHOLTZ
254
+ C EQUATION. IF LAMBDA .GT. 0, A SOLUTION
255
+ C MAY NOT EXIST. HOWEVER, HWSCSP WILL
256
+ C ATTEMPT TO FIND A SOLUTION. IF NBDCND = 5
257
+ C OR 6 OR MBDCND = 5,6,7,8, OR 9, ELMBDA
258
+ C MUST BE ZERO.
259
+ C
260
+ C F
261
+ C A TWO-DIMENSIONAL ARRAY, OF DIMENSION AT
262
+ C LEAST (M+1)*(N+1), SPECIFYING VALUES OF THE
263
+ C RIGHT SIDE OF THE HELMHOLTZ EQUATION AND
264
+ C BOUNDARY VALUES (IF ANY).
265
+ C
266
+ C ON THE INTERIOR, F IS DEFINED AS FOLLOWS:
267
+ C FOR I = 2,3,...,M AND J = 2,3,...,N
268
+ C F(I,J) = F(THETA(I),R(J)).
269
+ C
270
+ C ON THE BOUNDARIES, F IS DEFINED AS FOLLOWS:
271
+ C FOR J=1,2,...,N+1, I=1,2,...,M+1,
272
+ C
273
+ C MBDCND F(1,J) F(M+1,J)
274
+ C ------ ---------- ----------
275
+ C
276
+ C 1 U(TS,R(J)) U(TF,R(J))
277
+ C 2 U(TS,R(J)) F(TF,R(J))
278
+ C 3 F(TS,R(J)) F(TF,R(J))
279
+ C 4 F(TS,R(J)) U(TF,R(J))
280
+ C 5 F(0,R(J)) U(TF,R(J))
281
+ C 6 F(0,R(J)) F(TF,R(J))
282
+ C 7 U(TS,R(J)) F(PI,R(J))
283
+ C 8 F(TS,R(J)) F(PI,R(J))
284
+ C 9 F(0,R(J)) F(PI,R(J))
285
+ C
286
+ C NBDCND F(I,1) F(I,N+1)
287
+ C ------ -------------- --------------
288
+ C
289
+ C 1 U(THETA(I),RS) U(THETA(I),RF)
290
+ C 2 U(THETA(I),RS) F(THETA(I),RF)
291
+ C 3 F(THETA(I),RS) F(THETA(I),RF)
292
+ C 4 F(THETA(I),RS) U(THETA(I),RF)
293
+ C 5 F(TS,0) U(THETA(I),RF)
294
+ C 6 F(TS,0) F(THETA(I),RF)
295
+ C
296
+ C NOTE:
297
+ C IF THE TABLE CALLS FOR BOTH THE SOLUTION
298
+ C U AND THE RIGHT SIDE F AT A CORNER THEN
299
+ C THE SOLUTION MUST BE SPECIFIED.
300
+ C
301
+ C IDIMF
302
+ C THE ROW (OR FIRST) DIMENSION OF THE ARRAY
303
+ C F AS IT APPEARS IN THE PROGRAM CALLING
304
+ C HWSCSP. THIS PARAMETER IS USED TO SPECIFY
305
+ C THE VARIABLE DIMENSION OF F. IDIMF MUST
306
+ C BE AT LEAST M+1 .
307
+ C
308
+ C W
309
+ C A ONE-DIMENSIONAL ARRAY THAT MUST BE
310
+ C PROVIDED BY THE USER FOR WORK SPACE.
311
+ C ITS LENGTH CAN BE COMPUTED FROM THE
312
+ C FORMULA BELOW WHICH DEPENDS ON THE VALUE
313
+ C OF NBDCND
314
+ C
315
+ C IF NBDCND=2,4 OR 6 DEFINE NUNK=N
316
+ C IF NBDCND=1 OR 5 DEFINE NUNK=N-1
317
+ C IF NBDCND=3 DEFINE NUNK=N+1
318
+ C
319
+ C NOW SET K=INT(LOG2(NUNK))+1 AND
320
+ C L=2**(K+1) THEN W MUST BE DIMENSIONED
321
+ C AT LEAST (K-2)*L+K+5*(M+N)+MAX(2*N,6*M)+23
322
+ C
323
+ C **IMPORTANT**
324
+ C FOR PURPOSES OF CHECKING, THE REQUIRED
325
+ C LENGTH OF W IS COMPUTED BY HWSCSP AND
326
+ C STORED IN W(1) IN FLOATING POINT FORMAT.
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)), I = 1,2,...,M+1,
332
+ C J = 1,2,...,N+1 .
333
+ C
334
+ C PERTRB
335
+ C IF A COMBINATION OF PERIODIC OR DERIVATIVE
336
+ C BOUNDARY CONDITIONS IS SPECIFIED FOR A
337
+ C POISSON EQUATION (LAMBDA = 0), A SOLUTION
338
+ C MAY NOT EXIST. PERTRB IS A CONSTANT,
339
+ C CALCULATED AND SUBTRACTED FROM F, WHICH
340
+ C ENSURES THAT A SOLUTION EXISTS. HWSCSP
341
+ C THEN COMPUTES THIS SOLUTION, WHICH IS A
342
+ C LEAST SQUARES SOLUTION TO THE ORIGINAL
343
+ C APPROXIMATION. THIS SOLUTION IS NOT UNIQUE
344
+ C AND IS UNNORMALIZED. THE VALUE OF PERTRB
345
+ C SHOULD BE SMALL COMPARED TO THE RIGHT SIDE
346
+ C F. OTHERWISE , A SOLUTION IS OBTAINED TO
347
+ C AN ESSENTIALLY DIFFERENT PROBLEM. THIS
348
+ C COMPARISON SHOULD ALWAYS BE MADE TO INSURE
349
+ C THAT A MEANINGFUL 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 10,
354
+ C A SOLUTION IS NOT ATTEMPTED.
355
+ C
356
+ C = 1 TS.LT.0. OR TF.GT.PI
357
+ C = 2 TS.GE.TF
358
+ C = 3 M.LT.5
359
+ C = 4 MBDCND.LT.1 OR MBDCND.GT.9
360
+ C = 5 RS.LT.0
361
+ C = 6 RS.GE.RF
362
+ C = 7 N.LT.5
363
+ C = 8 NBDCND.LT.1 OR NBDCND.GT.6
364
+ C = 9 ELMBDA.GT.0
365
+ C = 10 IDIMF.LT.M+1
366
+ C = 11 ELMBDA.NE.0 AND MBDCND.GE.5
367
+ C = 12 ELMBDA.NE.0 AND NBDCND EQUALS 5 OR 6
368
+ C = 13 MBDCND EQUALS 5,6 OR 9 AND TS.NE.0
369
+ C = 14 MBDCND.GE.7 AND TF.NE.PI
370
+ C = 15 TS.EQ.0 AND MBDCND EQUALS 3,4 OR 8
371
+ C = 16 TF.EQ.PI AND MBDCND EQUALS 2,3 OR 6
372
+ C = 17 NBDCND.GE.5 AND RS.NE.0
373
+ C = 18 NBDCND.GE.5 AND MBDCND EQUALS 1,2,4,5 OR
374
+ C
375
+ C SINCE THIS IS THE ONLY MEANS OF INDICATING
376
+ C A POSSLIBY INCORRECT CALL TO HWSCSP, THE
377
+ C USER SHOULD TEST IERROR AFTER A CALL.
378
+ C
379
+ C W
380
+ C CONTAINS INTERMEDIATE VALUES THAT MUST NOT
381
+ C BE DESTROYED IF HWSCSP WILL BE CALLED AGAIN
382
+ C WITH INTL = 1. W(1) CONTAINS THE NUMBER
383
+ C OF LOCATIONS WHICH W MUST HAVE
384
+ C
385
+ C SPECIAL CONDITIONS NONE
386
+ C
387
+ C I/O NONE
388
+ C
389
+ C PRECISION SINGLE
390
+ C
391
+ C REQUIRED LIBRARY BLKTRI, AND COMF FROM FISHPACK
392
+ C FILES
393
+ C
394
+ C LANGUAGE FORTRAN
395
+ C
396
+ C HISTORY WRITTEN BY ROLAND SWEET AT NCAR IN THE LATE
397
+ C 1970'S. RELEASED ON NCAR'S PUBLIC SOFTWARE
398
+ C LIBRARIES IN JANUARY 1980.
399
+ C
400
+ C PORTABILITY FORTRAN 77.
401
+ C
402
+ C ALGORITHM THE ROUTINE DEFINES THE FINITE DIFFERENCE
403
+ C EQUATIONS, INCORPORATES BOUNDARY DATA, AND
404
+ C ADJUSTS THE RIGHT SIDE OF SINGULAR SYSTEMS
405
+ C AND THEN CALLS BLKTRI TO SOLVE THE SYSTEM.
406
+ C
407
+ C REFERENCES SWARZTRAUBER,P. AND R. SWEET, "EFFICIENT
408
+ C FORTRAN SUBPROGRAMS FOR THE SOLUTION OF
409
+ C ELLIPTIC EQUATIONS"
410
+ C NCAR TN/IA-109, JULY, 1975, 138 PP.
411
+ C***********************************************************************
412
+ DIMENSION F(IDIMF,1) ,BDTS(*) ,BDTF(*) ,BDRS(*) ,
413
+ 1 BDRF(*) ,W(*)
414
+ C
415
+ PI = PIMACH(DUM)
416
+ IERROR = 0
417
+ IF (TS.LT.0. .OR. TF.GT.PI) IERROR = 1
418
+ IF (TS .GE. TF) IERROR = 2
419
+ IF (M .LT. 5) IERROR = 3
420
+ IF (MBDCND.LT.1 .OR. MBDCND.GT.9) IERROR = 4
421
+ IF (RS .LT. 0.) IERROR = 5
422
+ IF (RS .GE. RF) IERROR = 6
423
+ IF (N .LT. 5) IERROR = 7
424
+ IF (NBDCND.LT.1 .OR. NBDCND.GT.6) IERROR = 8
425
+ IF (ELMBDA .GT. 0.) IERROR = 9
426
+ IF (IDIMF .LT. M+1) IERROR = 10
427
+ IF (ELMBDA.NE.0. .AND. MBDCND.GE.5) IERROR = 11
428
+ IF (ELMBDA.NE.0. .AND. (NBDCND.EQ.5 .OR. NBDCND.EQ.6)) IERROR = 12
429
+ IF ((MBDCND.EQ.5 .OR. MBDCND.EQ.6 .OR. MBDCND.EQ.9) .AND.
430
+ 1 TS.NE.0.) IERROR = 13
431
+ IF (MBDCND.GE.7 .AND. TF.NE.PI) IERROR = 14
432
+ IF (TS.EQ.0. .AND.
433
+ 1 (MBDCND.EQ.4 .OR. MBDCND.EQ.8 .OR. MBDCND.EQ.3)) IERROR = 15
434
+ IF (TF.EQ.PI .AND.
435
+ 1 (MBDCND.EQ.2 .OR. MBDCND.EQ.3 .OR. MBDCND.EQ.6)) IERROR = 16
436
+ IF (NBDCND.GE.5 .AND. RS.NE.0.) IERROR = 17
437
+ IF (NBDCND.GE.5 .AND. (MBDCND.EQ.1 .OR. MBDCND.EQ.2 .OR.
438
+ 1 MBDCND.EQ.5 .OR. MBDCND.EQ.7))
439
+ 2 IERROR = 18
440
+ IF (IERROR.NE.0 .AND. IERROR.NE.9) RETURN
441
+ NCK = N
442
+ GO TO (101,103,102,103,101,103),NBDCND
443
+ 101 NCK = NCK-1
444
+ GO TO 103
445
+ 102 NCK = NCK+1
446
+ 103 L = 2
447
+ K = 1
448
+ 104 L = L+L
449
+ K = K+1
450
+ IF (NCK-L) 105,105,104
451
+ 105 L = L+L
452
+ NP1 = N+1
453
+ MP1 = M+1
454
+ I1 = (K-2)*L+K+MAX0(2*N,6*M)+13
455
+ I2 = I1+NP1
456
+ I3 = I2+NP1
457
+ I4 = I3+NP1
458
+ I5 = I4+NP1
459
+ I6 = I5+NP1
460
+ I7 = I6+MP1
461
+ I8 = I7+MP1
462
+ I9 = I8+MP1
463
+ I10 = I9+MP1
464
+ W(1) = FLOAT(I10+M)
465
+ CALL HWSCS1 (INTL,TS,TF,M,MBDCND,BDTS,BDTF,RS,RF,N,NBDCND,BDRS,
466
+ 1 BDRF,ELMBDA,F,IDIMF,PERTRB,W(2),W(I1),W(I2),W(I3),
467
+ 2 W(I4),W(I5),W(I6),W(I7),W(I8),W(I9),W(I10))
468
+ RETURN
469
+ END
470
+ SUBROUTINE HWSCS1 (INTL,TS,TF,M,MBDCND,BDTS,BDTF,RS,RF,N,NBDCND,
471
+ 1 BDRS,BDRF,ELMBDA,F,IDIMF,PERTRB,W,S,AN,BN,CN,
472
+ 2 R,AM,BM,CM,SINT,BMH)
473
+ DIMENSION F(IDIMF,*) ,BDRS(*) ,BDRF(*) ,BDTS(*) ,
474
+ 1 BDTF(*) ,AM(*) ,BM(*) ,CM(*) ,
475
+ 2 AN(*) ,BN(*) ,CN(*) ,S(*) ,
476
+ 3 R(*) ,SINT(*) ,BMH(*) ,W(*)
477
+ PI = PIMACH(DUM)
478
+ EPS = EPMACH(DUM)
479
+ MP1 = M+1
480
+ DTH = (TF-TS)/FLOAT(M)
481
+ TDT = DTH+DTH
482
+ HDTH = DTH/2.
483
+ SDTS = 1./(DTH*DTH)
484
+ DO 102 I=1,MP1
485
+ THETA = TS+FLOAT(I-1)*DTH
486
+ SINT(I) = SIN(THETA)
487
+ IF (SINT(I)) 101,102,101
488
+ 101 T1 = SDTS/SINT(I)
489
+ AM(I) = T1*SIN(THETA-HDTH)
490
+ CM(I) = T1*SIN(THETA+HDTH)
491
+ BM(I) = -(AM(I)+CM(I))
492
+ 102 CONTINUE
493
+ NP1 = N+1
494
+ DR = (RF-RS)/FLOAT(N)
495
+ HDR = DR/2.
496
+ TDR = DR+DR
497
+ DR2 = DR*DR
498
+ CZR = 6.*DTH/(DR2*(COS(TS)-COS(TF)))
499
+ DO 103 J=1,NP1
500
+ R(J) = RS+FLOAT(J-1)*DR
501
+ AN(J) = (R(J)-HDR)**2/DR2
502
+ CN(J) = (R(J)+HDR)**2/DR2
503
+ BN(J) = -(AN(J)+CN(J))
504
+ 103 CONTINUE
505
+ MP = 1
506
+ NP = 1
507
+ C
508
+ C BOUNDARY CONDITION AT PHI=PS
509
+ C
510
+ GO TO (104,104,105,105,106,106,104,105,106),MBDCND
511
+ 104 AT = AM(2)
512
+ ITS = 2
513
+ GO TO 107
514
+ 105 AT = AM(1)
515
+ ITS = 1
516
+ CM(1) = CM(1)+AM(1)
517
+ GO TO 107
518
+ 106 ITS = 1
519
+ BM(1) = -4.*SDTS
520
+ CM(1) = -BM(1)
521
+ C
522
+ C BOUNDARY CONDITION AT PHI=PF
523
+ C
524
+ 107 GO TO (108,109,109,108,108,109,110,110,110),MBDCND
525
+ 108 CT = CM(M)
526
+ ITF = M
527
+ GO TO 111
528
+ 109 CT = CM(M+1)
529
+ AM(M+1) = AM(M+1)+CM(M+1)
530
+ ITF = M+1
531
+ GO TO 111
532
+ 110 ITF = M+1
533
+ AM(M+1) = 4.*SDTS
534
+ BM(M+1) = -AM(M+1)
535
+ 111 WTS = SINT(ITS+1)*AM(ITS+1)/CM(ITS)
536
+ WTF = SINT(ITF-1)*CM(ITF-1)/AM(ITF)
537
+ ITSP = ITS+1
538
+ ITFM = ITF-1
539
+ C
540
+ C BOUNDARY CONDITION AT R=RS
541
+ C
542
+ ICTR = 0
543
+ GO TO (112,112,113,113,114,114),NBDCND
544
+ 112 AR = AN(2)
545
+ JRS = 2
546
+ GO TO 118
547
+ 113 AR = AN(1)
548
+ JRS = 1
549
+ CN(1) = CN(1)+AN(1)
550
+ GO TO 118
551
+ 114 JRS = 2
552
+ ICTR = 1
553
+ S(N) = AN(N)/BN(N)
554
+ DO 115 J=3,N
555
+ L = N-J+2
556
+ S(L) = AN(L)/(BN(L)-CN(L)*S(L+1))
557
+ 115 CONTINUE
558
+ S(2) = -S(2)
559
+ DO 116 J=3,N
560
+ S(J) = -S(J)*S(J-1)
561
+ 116 CONTINUE
562
+ WTNM = WTS+WTF
563
+ DO 117 I=ITSP,ITFM
564
+ WTNM = WTNM+SINT(I)
565
+ 117 CONTINUE
566
+ YPS = CZR*WTNM*(S(2)-1.)
567
+ C
568
+ C BOUNDARY CONDITION AT R=RF
569
+ C
570
+ 118 GO TO (119,120,120,119,119,120),NBDCND
571
+ 119 CR = CN(N)
572
+ JRF = N
573
+ GO TO 121
574
+ 120 CR = CN(N+1)
575
+ AN(N+1) = AN(N+1)+CN(N+1)
576
+ JRF = N+1
577
+ 121 WRS = AN(JRS+1)*R(JRS)**2/CN(JRS)
578
+ WRF = CN(JRF-1)*R(JRF)**2/AN(JRF)
579
+ WRZ = AN(JRS)/CZR
580
+ JRSP = JRS+1
581
+ JRFM = JRF-1
582
+ MUNK = ITF-ITS+1
583
+ NUNK = JRF-JRS+1
584
+ DO 122 I=ITS,ITF
585
+ BMH(I) = BM(I)
586
+ 122 CONTINUE
587
+ ISING = 0
588
+ GO TO (132,132,123,132,132,123),NBDCND
589
+ 123 GO TO (132,132,124,132,132,124,132,124,124),MBDCND
590
+ 124 IF (ELMBDA) 132,125,125
591
+ 125 ISING = 1
592
+ SUM = WTS*WRS+WTS*WRF+WTF*WRS+WTF*WRF
593
+ IF (ICTR) 126,127,126
594
+ 126 SUM = SUM+WRZ
595
+ 127 DO 129 J=JRSP,JRFM
596
+ R2 = R(J)**2
597
+ DO 128 I=ITSP,ITFM
598
+ SUM = SUM+R2*SINT(I)
599
+ 128 CONTINUE
600
+ 129 CONTINUE
601
+ DO 130 J=JRSP,JRFM
602
+ SUM = SUM+(WTS+WTF)*R(J)**2
603
+ 130 CONTINUE
604
+ DO 131 I=ITSP,ITFM
605
+ SUM = SUM+(WRS+WRF)*SINT(I)
606
+ 131 CONTINUE
607
+ HNE = SUM
608
+ 132 GO TO (133,133,133,133,134,134,133,133,134),MBDCND
609
+ 133 BM(ITS) = BMH(ITS)+ELMBDA/SINT(ITS)**2
610
+ 134 GO TO (135,135,135,135,135,135,136,136,136),MBDCND
611
+ 135 BM(ITF) = BMH(ITF)+ELMBDA/SINT(ITF)**2
612
+ 136 DO 137 I=ITSP,ITFM
613
+ BM(I) = BMH(I)+ELMBDA/SINT(I)**2
614
+ 137 CONTINUE
615
+ GO TO (138,138,140,140,142,142,138,140,142),MBDCND
616
+ 138 DO 139 J=JRS,JRF
617
+ F(2,J) = F(2,J)-AT*F(1,J)/R(J)**2
618
+ 139 CONTINUE
619
+ GO TO 142
620
+ 140 DO 141 J=JRS,JRF
621
+ F(1,J) = F(1,J)+TDT*BDTS(J)*AT/R(J)**2
622
+ 141 CONTINUE
623
+ 142 GO TO (143,145,145,143,143,145,147,147,147),MBDCND
624
+ 143 DO 144 J=JRS,JRF
625
+ F(M,J) = F(M,J)-CT*F(M+1,J)/R(J)**2
626
+ 144 CONTINUE
627
+ GO TO 147
628
+ 145 DO 146 J=JRS,JRF
629
+ F(M+1,J) = F(M+1,J)-TDT*BDTF(J)*CT/R(J)**2
630
+ 146 CONTINUE
631
+ 147 GO TO (151,151,153,153,148,148),NBDCND
632
+ 148 IF (MBDCND-3) 155,149,155
633
+ 149 YHLD = F(ITS,1)-CZR/TDT*(SIN(TF)*BDTF(2)-SIN(TS)*BDTS(2))
634
+ DO 150 I=1,MP1
635
+ F(I,1) = YHLD
636
+ 150 CONTINUE
637
+ GO TO 155
638
+ 151 RS2 = (RS+DR)**2
639
+ DO 152 I=ITS,ITF
640
+ F(I,2) = F(I,2)-AR*F(I,1)/RS2
641
+ 152 CONTINUE
642
+ GO TO 155
643
+ 153 DO 154 I=ITS,ITF
644
+ F(I,1) = F(I,1)+TDR*BDRS(I)*AR/RS**2
645
+ 154 CONTINUE
646
+ 155 GO TO (156,158,158,156,156,158),NBDCND
647
+ 156 RF2 = (RF-DR)**2
648
+ DO 157 I=ITS,ITF
649
+ F(I,N) = F(I,N)-CR*F(I,N+1)/RF2
650
+ 157 CONTINUE
651
+ GO TO 160
652
+ 158 DO 159 I=ITS,ITF
653
+ F(I,N+1) = F(I,N+1)-TDR*BDRF(I)*CR/RF**2
654
+ 159 CONTINUE
655
+ 160 CONTINUE
656
+ PERTRB = 0.
657
+ IF (ISING) 161,170,161
658
+ 161 SUM = WTS*WRS*F(ITS,JRS)+WTS*WRF*F(ITS,JRF)+WTF*WRS*F(ITF,JRS)+
659
+ 1 WTF*WRF*F(ITF,JRF)
660
+ IF (ICTR) 162,163,162
661
+ 162 SUM = SUM+WRZ*F(ITS,1)
662
+ 163 DO 165 J=JRSP,JRFM
663
+ R2 = R(J)**2
664
+ DO 164 I=ITSP,ITFM
665
+ SUM = SUM+R2*SINT(I)*F(I,J)
666
+ 164 CONTINUE
667
+ 165 CONTINUE
668
+ DO 166 J=JRSP,JRFM
669
+ SUM = SUM+R(J)**2*(WTS*F(ITS,J)+WTF*F(ITF,J))
670
+ 166 CONTINUE
671
+ DO 167 I=ITSP,ITFM
672
+ SUM = SUM+SINT(I)*(WRS*F(I,JRS)+WRF*F(I,JRF))
673
+ 167 CONTINUE
674
+ PERTRB = SUM/HNE
675
+ DO 169 J=1,NP1
676
+ DO 168 I=1,MP1
677
+ F(I,J) = F(I,J)-PERTRB
678
+ 168 CONTINUE
679
+ 169 CONTINUE
680
+ 170 DO 172 J=JRS,JRF
681
+ RSQ = R(J)**2
682
+ DO 171 I=ITS,ITF
683
+ F(I,J) = RSQ*F(I,J)
684
+ 171 CONTINUE
685
+ 172 CONTINUE
686
+ IFLG = INTL
687
+ 173 CALL BLKTRI (IFLG,NP,NUNK,AN(JRS),BN(JRS),CN(JRS),MP,MUNK,
688
+ 1 AM(ITS),BM(ITS),CM(ITS),IDIMF,F(ITS,JRS),IERROR,W)
689
+ IFLG = IFLG+1
690
+ IF (IFLG-1) 174,173,174
691
+ 174 IF (NBDCND) 177,175,177
692
+ 175 DO 176 I=1,MP1
693
+ F(I,JRF+1) = F(I,JRS)
694
+ 176 CONTINUE
695
+ 177 IF (MBDCND) 180,178,180
696
+ 178 DO 179 J=1,NP1
697
+ F(ITF+1,J) = F(ITS,J)
698
+ 179 CONTINUE
699
+ 180 XP = 0.
700
+ IF (ICTR) 181,188,181
701
+ 181 IF (ISING) 186,182,186
702
+ 182 SUM = WTS*F(ITS,2)+WTF*F(ITF,2)
703
+ DO 183 I=ITSP,ITFM
704
+ SUM = SUM+SINT(I)*F(I,2)
705
+ 183 CONTINUE
706
+ YPH = CZR*SUM
707
+ XP = (F(ITS,1)-YPH)/YPS
708
+ DO 185 J=JRS,JRF
709
+ XPS = XP*S(J)
710
+ DO 184 I=ITS,ITF
711
+ F(I,J) = F(I,J)+XPS
712
+ 184 CONTINUE
713
+ 185 CONTINUE
714
+ 186 DO 187 I=1,MP1
715
+ F(I,1) = XP
716
+ 187 CONTINUE
717
+ 188 RETURN
718
+ C
719
+ C REVISION HISTORY---
720
+ C
721
+ C SEPTEMBER 1973 VERSION 1
722
+ C APRIL 1976 VERSION 2
723
+ C JANUARY 1978 VERSION 3
724
+ C DECEMBER 1979 VERSION 3.1
725
+ C FEBRUARY 1985 DOCUMENTATION UPGRADE
726
+ C NOVEMBER 1988 VERSION 3.2, FORTRAN 77 CHANGES
727
+ C-----------------------------------------------------------------------
728
+ END