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,538 @@
1
+ C
2
+ C file hwscyl.f
3
+ C
4
+ SUBROUTINE HWSCYL (A,B,M,MBDCND,BDA,BDB,C,D,N,NBDCND,BDC,BDD,
5
+ 1 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+1),
40
+ C ARGUMENTS 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 HELMHOLTZ EQUATION IN CYLINDRICAL
46
+ C COORDINATES. THIS MODIFIED HELMHOLTZ EQUATION
47
+ C
48
+ C (1/R)(D/DR)(R(DU/DR)) + (D/DZ)(DU/DZ)
49
+ C
50
+ C + (LAMBDA/R**2)U = F(R,Z)
51
+ C
52
+ C RESULTS FROM THE FOURIER TRANSFORM OF THE
53
+ C THREE-DIMENSIONAL POISSON EQUATION.
54
+ C
55
+ C USAGE CALL HWSCYL (A,B,M,MBDCND,BDA,BDB,C,D,N,
56
+ C NBDCND,BDC,BDD,ELMBDA,F,IDIMF,
57
+ C PERTRB,IERROR,W)
58
+ C
59
+ C ARGUMENTS
60
+ C ON INPUT A,B
61
+ C THE RANGE OF R, I.E., A .LE. R .LE. B.
62
+ C A MUST BE LESS THAN B AND A MUST BE
63
+ C NON-NEGATIVE.
64
+ C
65
+ C M
66
+ C THE NUMBER OF PANELS INTO WHICH THE
67
+ C INTERVAL (A,B) IS SUBDIVIDED. HENCE,
68
+ C THERE WILL BE M+1 GRID POINTS IN THE
69
+ C R-DIRECTION GIVEN BY R(I) = A+(I-1)DR,
70
+ C FOR I = 1,2,...,M+1, WHERE DR = (B-A)/M
71
+ C IS THE PANEL WIDTH. M MUST BE GREATER
72
+ C THAN 3.
73
+ C
74
+ C MBDCND
75
+ C INDICATES THE TYPE OF BOUNDARY CONDITIONS
76
+ C AT R = A AND R = B.
77
+ C
78
+ C = 1 IF THE SOLUTION IS SPECIFIED AT
79
+ C R = A AND R = B.
80
+ C = 2 IF THE SOLUTION IS SPECIFIED AT
81
+ C R = A AND THE DERIVATIVE OF THE
82
+ C SOLUTION WITH RESPECT TO R IS
83
+ C SPECIFIED AT R = B.
84
+ C = 3 IF THE DERIVATIVE OF THE SOLUTION
85
+ C WITH RESPECT TO R IS SPECIFIED AT
86
+ C R = A (SEE NOTE BELOW) AND R = B.
87
+ C = 4 IF THE DERIVATIVE OF THE SOLUTION
88
+ C WITH RESPECT TO R IS SPECIFIED AT
89
+ C R = A (SEE NOTE BELOW) AND THE
90
+ C SOLUTION IS SPECIFIED AT R = B.
91
+ C = 5 IF THE SOLUTION IS UNSPECIFIED AT
92
+ C R = A = 0 AND THE SOLUTION IS
93
+ C SPECIFIED AT R = B.
94
+ C = 6 IF THE SOLUTION IS UNSPECIFIED AT
95
+ C R = A = 0 AND THE DERIVATIVE OF THE
96
+ C SOLUTION WITH RESPECT TO R IS SPECIFIED
97
+ C AT R = B.
98
+ C
99
+ C IF A = 0, DO NOT USE MBDCND = 3 OR 4,
100
+ C BUT INSTEAD USE MBDCND = 1,2,5, OR 6 .
101
+ C
102
+ C BDA
103
+ C A ONE-DIMENSIONAL ARRAY OF LENGTH N+1 THAT
104
+ C SPECIFIES THE VALUES OF THE DERIVATIVE OF
105
+ C THE SOLUTION WITH RESPECT TO R AT R = A.
106
+ C
107
+ C WHEN MBDCND = 3 OR 4,
108
+ C BDA(J) = (D/DR)U(A,Z(J)), J = 1,2,...,N+1.
109
+ C
110
+ C WHEN MBDCND HAS ANY OTHER VALUE, BDA IS
111
+ C A DUMMY VARIABLE.
112
+ C
113
+ C BDB
114
+ C A ONE-DIMENSIONAL ARRAY OF LENGTH N+1 THAT
115
+ C SPECIFIES THE VALUES OF THE DERIVATIVE
116
+ C OF THE SOLUTION WITH RESPECT TO R AT R = B.
117
+ C
118
+ C WHEN MBDCND = 2,3, OR 6,
119
+ C BDB(J) = (D/DR)U(B,Z(J)), J = 1,2,...,N+1.
120
+ C
121
+ C WHEN MBDCND HAS ANY OTHER VALUE, BDB IS
122
+ C A DUMMY VARIABLE.
123
+ C
124
+ C C,D
125
+ C THE RANGE OF Z, I.E., C .LE. Z .LE. D.
126
+ C C MUST BE LESS THAN D.
127
+ C
128
+ C N
129
+ C THE NUMBER OF PANELS INTO WHICH THE
130
+ C INTERVAL (C,D) IS SUBDIVIDED. HENCE,
131
+ C THERE WILL BE N+1 GRID POINTS IN THE
132
+ C Z-DIRECTION GIVEN BY Z(J) = C+(J-1)DZ,
133
+ C FOR J = 1,2,...,N+1,
134
+ C WHERE DZ = (D-C)/N IS THE PANEL WIDTH.
135
+ C N MUST BE GREATER THAN 3.
136
+ C
137
+ C NBDCND
138
+ C INDICATES THE TYPE OF BOUNDARY CONDITIONS
139
+ C AT Z = C AND Z = D.
140
+ C
141
+ C = 0 IF THE SOLUTION IS PERIODIC IN Z,
142
+ C I.E., U(I,1) = U(I,N+1).
143
+ C = 1 IF THE SOLUTION IS SPECIFIED AT
144
+ C Z = C AND Z = D.
145
+ C = 2 IF THE SOLUTION IS SPECIFIED AT
146
+ C Z = C AND THE DERIVATIVE OF
147
+ C THE SOLUTION WITH RESPECT TO Z IS
148
+ C SPECIFIED AT Z = D.
149
+ C = 3 IF THE DERIVATIVE OF THE SOLUTION
150
+ C WITH RESPECT TO Z IS
151
+ C SPECIFIED AT Z = C AND Z = D.
152
+ C = 4 IF THE DERIVATIVE OF THE SOLUTION
153
+ C WITH RESPECT TO Z IS SPECIFIED AT
154
+ C Z = C AND THE SOLUTION IS SPECIFIED
155
+ C AT Z = D.
156
+ C
157
+ C BDC
158
+ C A ONE-DIMENSIONAL ARRAY OF LENGTH M+1 THAT
159
+ C SPECIFIES THE VALUES OF THE DERIVATIVE
160
+ C OF THE SOLUTION WITH RESPECT TO Z AT Z = C.
161
+ C
162
+ C WHEN NBDCND = 3 OR 4,
163
+ C BDC(I) = (D/DZ)U(R(I),C), I = 1,2,...,M+1.
164
+ C
165
+ C WHEN NBDCND HAS ANY OTHER VALUE, BDC IS
166
+ C A DUMMY VARIABLE.
167
+ C
168
+ C BDD
169
+ C A ONE-DIMENSIONAL ARRAY OF LENGTH M+1 THAT
170
+ C SPECIFIES THE VALUES OF THE DERIVATIVE OF
171
+ C THE SOLUTION WITH RESPECT TO Z AT Z = D.
172
+ C
173
+ C WHEN NBDCND = 2 OR 3,
174
+ C BDD(I) = (D/DZ)U(R(I),D), I = 1,2,...,M+1
175
+ C
176
+ C WHEN NBDCND HAS ANY OTHER VALUE, BDD IS
177
+ C A DUMMY VARIABLE.
178
+ C
179
+ C ELMBDA
180
+ C THE CONSTANT LAMBDA IN THE HELMHOLTZ
181
+ C EQUATION. IF LAMBDA .GT. 0, A SOLUTION
182
+ C MAY NOT EXIST. HOWEVER, HWSCYL WILL
183
+ C ATTEMPT TO FIND A SOLUTION. LAMBDA MUST
184
+ C BE ZERO WHEN MBDCND = 5 OR 6 .
185
+ C
186
+ C F
187
+ C A TWO-DIMENSIONAL ARRAY, OF DIMENSION AT
188
+ C LEAST (M+1)*(N+1), SPECIFYING VALUES
189
+ C OF THE RIGHT SIDE OF THE HELMHOLTZ
190
+ C EQUATION AND BOUNDARY DATA (IF ANY).
191
+ C
192
+ C ON THE INTERIOR, F IS DEFINED AS FOLLOWS:
193
+ C FOR I = 2,3,...,M AND J = 2,3,...,N
194
+ C F(I,J) = F(R(I),Z(J)).
195
+ C
196
+ C ON THE BOUNDARIES F IS DEFINED AS FOLLOWS:
197
+ C FOR J = 1,2,...,N+1 AND I = 1,2,...,M+1
198
+ C
199
+ C MBDCND F(1,J) F(M+1,J)
200
+ C ------ --------- ---------
201
+ C
202
+ C 1 U(A,Z(J)) U(B,Z(J))
203
+ C 2 U(A,Z(J)) F(B,Z(J))
204
+ C 3 F(A,Z(J)) F(B,Z(J))
205
+ C 4 F(A,Z(J)) U(B,Z(J))
206
+ C 5 F(0,Z(J)) U(B,Z(J))
207
+ C 6 F(0,Z(J)) F(B,Z(J))
208
+ C
209
+ C NBDCND F(I,1) F(I,N+1)
210
+ C ------ --------- ---------
211
+ C
212
+ C 0 F(R(I),C) F(R(I),C)
213
+ C 1 U(R(I),C) U(R(I),D)
214
+ C 2 U(R(I),C) F(R(I),D)
215
+ C 3 F(R(I),C) F(R(I),D)
216
+ C 4 F(R(I),C) U(R(I),D)
217
+ C
218
+ C NOTE:
219
+ C IF THE TABLE CALLS FOR BOTH THE SOLUTION
220
+ C U AND THE RIGHT SIDE F AT A CORNER THEN
221
+ C THE SOLUTION MUST BE SPECIFIED.
222
+ C
223
+ C IDIMF
224
+ C THE ROW (OR FIRST) DIMENSION OF THE ARRAY
225
+ C F AS IT APPEARS IN THE PROGRAM CALLING
226
+ C HWSCYL. THIS PARAMETER IS USED TO SPECIFY
227
+ C THE VARIABLE DIMENSION OF F. IDIMF MUST
228
+ C BE AT LEAST M+1 .
229
+ C
230
+ C W
231
+ C A ONE-DIMENSIONAL ARRAY THAT MUST BE
232
+ C PROVIDED BY THE USER FOR WORK SPACE.
233
+ C W MAY REQUIRE UP TO 4*(N+1) +
234
+ C (13 + INT(LOG2(N+1)))*(M+1) LOCATIONS.
235
+ C THE ACTUAL NUMBER OF LOCATIONS USED IS
236
+ C COMPUTED BY HWSCYL AND IS RETURNED IN
237
+ C LOCATION W(1).
238
+ C
239
+ C
240
+ C ON OUTPUT F
241
+ C CONTAINS THE SOLUTION U(I,J) OF THE FINITE
242
+ C DIFFERENCE APPROXIMATION FOR THE GRID POINT
243
+ C (R(I),Z(J)), I =1,2,...,M+1, J =1,2,...,N+1.
244
+ C
245
+ C PERTRB
246
+ C IF ONE SPECIFIES A COMBINATION OF PERIODIC,
247
+ C DERIVATIVE, AND UNSPECIFIED BOUNDARY
248
+ C CONDITIONS FOR A POISSON EQUATION
249
+ C (LAMBDA = 0), A SOLUTION MAY NOT EXIST.
250
+ C PERTRB IS A CONSTANT, CALCULATED AND
251
+ C SUBTRACTED FROM F, WHICH ENSURES THAT A
252
+ C SOLUTION EXISTS. HWSCYL THEN COMPUTES
253
+ C THIS SOLUTION, WHICH IS A LEAST SQUARES
254
+ C SOLUTION TO THE ORIGINAL APPROXIMATION.
255
+ C THIS SOLUTION PLUS ANY CONSTANT IS ALSO
256
+ C A SOLUTION. HENCE, THE SOLUTION IS NOT
257
+ C UNIQUE. THE VALUE OF PERTRB SHOULD BE
258
+ C SMALL COMPARED TO THE RIGHT SIDE F.
259
+ C OTHERWISE, A SOLUTION IS OBTAINED TO AN
260
+ C ESSENTIALLY DIFFERENT PROBLEM. THIS
261
+ C COMPARISON SHOULD ALWAYS BE MADE TO INSURE
262
+ C THAT A MEANINGFUL SOLUTION HAS BEEN OBTAINED.
263
+ C
264
+ C IERROR
265
+ C AN ERROR FLAG WHICH INDICATES INVALID INPUT
266
+ C PARAMETERS. EXCEPT FOR NUMBERS 0 AND 11,
267
+ C A SOLUTION IS NOT ATTEMPTED.
268
+ C
269
+ C = 0 NO ERROR.
270
+ C = 1 A .LT. 0 .
271
+ C = 2 A .GE. B.
272
+ C = 3 MBDCND .LT. 1 OR MBDCND .GT. 6 .
273
+ C = 4 C .GE. D.
274
+ C = 5 N .LE. 3
275
+ C = 6 NBDCND .LT. 0 OR NBDCND .GT. 4 .
276
+ C = 7 A = 0, MBDCND = 3 OR 4 .
277
+ C = 8 A .GT. 0, MBDCND .GE. 5 .
278
+ C = 9 A = 0, LAMBDA .NE. 0, MBDCND .GE. 5 .
279
+ C = 10 IDIMF .LT. M+1 .
280
+ C = 11 LAMBDA .GT. 0 .
281
+ C = 12 M .LE. 3
282
+ C
283
+ C SINCE THIS IS THE ONLY MEANS OF INDICATING
284
+ C A POSSIBLY INCORRECT CALL TO HWSCYL, THE
285
+ C USER SHOULD TEST IERROR AFTER THE CALL.
286
+ C
287
+ C W
288
+ C W(1) CONTAINS THE REQUIRED LENGTH OF W.
289
+ C
290
+ C SPECIAL CONDITIONS NONE
291
+ C
292
+ C I/O NONE
293
+ C
294
+ C PRECISION SINGLE
295
+ C
296
+ C REQUIRED LIBRARY GENBUN, GNBNAUX, AND COMF
297
+ C FILES FROM FISHPACK
298
+ C
299
+ C LANGUAGE FORTRAN
300
+ C
301
+ C HISTORY WRITTEN BY ROLAND SWEET AT NCAR IN THE LATE
302
+ C 1970'S. RELEASED ON NCAR'S PUBLIC SOFTWARE
303
+ C LIBRARIES IN JANUARY 1980.
304
+ C
305
+ C PORTABILITY FORTRAN 77
306
+ C
307
+ C ALGORITHM THE ROUTINE DEFINES THE FINITE DIFFERENCE
308
+ C EQUATIONS, INCORPORATES BOUNDARY DATA, AND
309
+ C ADJUSTS THE RIGHT SIDE OF SINGULAR SYSTEMS
310
+ C AND THEN CALLS GENBUN TO SOLVE THE SYSTEM.
311
+ C
312
+ C TIMING FOR LARGE M AND N, THE OPERATION COUNT
313
+ C IS ROUGHLY PROPORTIONAL TO
314
+ C M*N*(LOG2(N)
315
+ C BUT ALSO DEPENDS ON INPUT PARAMETERS NBDCND
316
+ C AND MBDCND.
317
+ C
318
+ C ACCURACY THE SOLUTION PROCESS EMPLOYED RESULTS IN A LOSS
319
+ C OF NO MORE THAN THREE SIGNIFICANT DIGITS FOR N
320
+ C AND M AS LARGE AS 64. MORE DETAILS ABOUT
321
+ C ACCURACY CAN BE FOUND IN THE DOCUMENTATION FOR
322
+ C SUBROUTINE GENBUN WHICH IS THE ROUTINE THAT
323
+ C SOLVES THE FINITE DIFFERENCE EQUATIONS.
324
+ C
325
+ C REFERENCES SWARZTRAUBER,P. AND R. SWEET, "EFFICIENT
326
+ C FORTRAN SUBPROGRAMS FOR THE SOLUTION OF
327
+ C ELLIPTIC EQUATIONS"
328
+ C NCAR TN/IA-109, JULY, 1975, 138 PP.
329
+ C***********************************************************************
330
+ DIMENSION F(IDIMF,*)
331
+ DIMENSION BDA(*) ,BDB(*) ,BDC(*) ,BDD(*) ,
332
+ 1 W(*)
333
+ C
334
+ C CHECK FOR INVALID PARAMETERS.
335
+ C
336
+ IERROR = 0
337
+ IF (A .LT. 0.) IERROR = 1
338
+ IF (A .GE. B) IERROR = 2
339
+ IF (MBDCND.LE.0 .OR. MBDCND.GE.7) IERROR = 3
340
+ IF (C .GE. D) IERROR = 4
341
+ IF (N .LE. 3) IERROR = 5
342
+ IF (NBDCND.LE.-1 .OR. NBDCND.GE.5) IERROR = 6
343
+ IF (A.EQ.0. .AND. (MBDCND.EQ.3 .OR. MBDCND.EQ.4)) IERROR = 7
344
+ IF (A.GT.0. .AND. MBDCND.GE.5) IERROR = 8
345
+ IF (A.EQ.0. .AND. ELMBDA.NE.0. .AND. MBDCND.GE.5) IERROR = 9
346
+ IF (IDIMF .LT. M+1) IERROR = 10
347
+ IF (M .LE. 3) IERROR = 12
348
+ IF (IERROR .NE. 0) RETURN
349
+ MP1 = M+1
350
+ DELTAR = (B-A)/FLOAT(M)
351
+ DLRBY2 = DELTAR/2.
352
+ DLRSQ = DELTAR**2
353
+ NP1 = N+1
354
+ DELTHT = (D-C)/FLOAT(N)
355
+ DLTHSQ = DELTHT**2
356
+ NP = NBDCND+1
357
+ C
358
+ C DEFINE RANGE OF INDICES I AND J FOR UNKNOWNS U(I,J).
359
+ C
360
+ MSTART = 2
361
+ MSTOP = M
362
+ GO TO (104,103,102,101,101,102),MBDCND
363
+ 101 MSTART = 1
364
+ GO TO 104
365
+ 102 MSTART = 1
366
+ 103 MSTOP = MP1
367
+ 104 MUNK = MSTOP-MSTART+1
368
+ NSTART = 1
369
+ NSTOP = N
370
+ GO TO (108,105,106,107,108),NP
371
+ 105 NSTART = 2
372
+ GO TO 108
373
+ 106 NSTART = 2
374
+ 107 NSTOP = NP1
375
+ 108 NUNK = NSTOP-NSTART+1
376
+ C
377
+ C DEFINE A,B,C COEFFICIENTS IN W-ARRAY.
378
+ C
379
+ ID2 = MUNK
380
+ ID3 = ID2+MUNK
381
+ ID4 = ID3+MUNK
382
+ ID5 = ID4+MUNK
383
+ ID6 = ID5+MUNK
384
+ ISTART = 1
385
+ A1 = 2./DLRSQ
386
+ IJ = 0
387
+ IF (MBDCND.EQ.3 .OR. MBDCND.EQ.4) IJ = 1
388
+ IF (MBDCND .LE. 4) GO TO 109
389
+ W(1) = 0.
390
+ W(ID2+1) = -2.*A1
391
+ W(ID3+1) = 2.*A1
392
+ ISTART = 2
393
+ IJ = 1
394
+ 109 DO 110 I=ISTART,MUNK
395
+ R = A+FLOAT(I-IJ)*DELTAR
396
+ J = ID5+I
397
+ W(J) = R
398
+ J = ID6+I
399
+ W(J) = 1./R**2
400
+ W(I) = (R-DLRBY2)/(R*DLRSQ)
401
+ J = ID3+I
402
+ W(J) = (R+DLRBY2)/(R*DLRSQ)
403
+ K = ID6+I
404
+ J = ID2+I
405
+ W(J) = -A1+ELMBDA*W(K)
406
+ 110 CONTINUE
407
+ GO TO (114,111,112,113,114,112),MBDCND
408
+ 111 W(ID2) = A1
409
+ GO TO 114
410
+ 112 W(ID2) = A1
411
+ 113 W(ID3+1) = A1*FLOAT(ISTART)
412
+ 114 CONTINUE
413
+ C
414
+ C ENTER BOUNDARY DATA FOR R-BOUNDARIES.
415
+ C
416
+ GO TO (115,115,117,117,119,119),MBDCND
417
+ 115 A1 = W(1)
418
+ DO 116 J=NSTART,NSTOP
419
+ F(2,J) = F(2,J)-A1*F(1,J)
420
+ 116 CONTINUE
421
+ GO TO 119
422
+ 117 A1 = 2.*DELTAR*W(1)
423
+ DO 118 J=NSTART,NSTOP
424
+ F(1,J) = F(1,J)+A1*BDA(J)
425
+ 118 CONTINUE
426
+ 119 GO TO (120,122,122,120,120,122),MBDCND
427
+ 120 A1 = W(ID4)
428
+ DO 121 J=NSTART,NSTOP
429
+ F(M,J) = F(M,J)-A1*F(MP1,J)
430
+ 121 CONTINUE
431
+ GO TO 124
432
+ 122 A1 = 2.*DELTAR*W(ID4)
433
+ DO 123 J=NSTART,NSTOP
434
+ F(MP1,J) = F(MP1,J)-A1*BDB(J)
435
+ 123 CONTINUE
436
+ C
437
+ C ENTER BOUNDARY DATA FOR Z-BOUNDARIES.
438
+ C
439
+ 124 A1 = 1./DLTHSQ
440
+ L = ID5-MSTART+1
441
+ GO TO (134,125,125,127,127),NP
442
+ 125 DO 126 I=MSTART,MSTOP
443
+ F(I,2) = F(I,2)-A1*F(I,1)
444
+ 126 CONTINUE
445
+ GO TO 129
446
+ 127 A1 = 2./DELTHT
447
+ DO 128 I=MSTART,MSTOP
448
+ F(I,1) = F(I,1)+A1*BDC(I)
449
+ 128 CONTINUE
450
+ 129 A1 = 1./DLTHSQ
451
+ GO TO (134,130,132,132,130),NP
452
+ 130 DO 131 I=MSTART,MSTOP
453
+ F(I,N) = F(I,N)-A1*F(I,NP1)
454
+ 131 CONTINUE
455
+ GO TO 134
456
+ 132 A1 = 2./DELTHT
457
+ DO 133 I=MSTART,MSTOP
458
+ F(I,NP1) = F(I,NP1)-A1*BDD(I)
459
+ 133 CONTINUE
460
+ 134 CONTINUE
461
+ C
462
+ C ADJUST RIGHT SIDE OF SINGULAR PROBLEMS TO INSURE EXISTENCE OF A
463
+ C SOLUTION.
464
+ C
465
+ PERTRB = 0.
466
+ IF (ELMBDA) 146,136,135
467
+ 135 IERROR = 11
468
+ GO TO 146
469
+ 136 W(ID5+1) = .5*(W(ID5+2)-DLRBY2)
470
+ GO TO (146,146,138,146,146,137),MBDCND
471
+ 137 W(ID5+1) = .5*W(ID5+1)
472
+ 138 GO TO (140,146,146,139,146),NP
473
+ 139 A2 = 2.
474
+ GO TO 141
475
+ 140 A2 = 1.
476
+ 141 K = ID5+MUNK
477
+ W(K) = .5*(W(K-1)+DLRBY2)
478
+ S = 0.
479
+ DO 143 I=MSTART,MSTOP
480
+ S1 = 0.
481
+ NSP1 = NSTART+1
482
+ NSTM1 = NSTOP-1
483
+ DO 142 J=NSP1,NSTM1
484
+ S1 = S1+F(I,J)
485
+ 142 CONTINUE
486
+ K = I+L
487
+ S = S+(A2*S1+F(I,NSTART)+F(I,NSTOP))*W(K)
488
+ 143 CONTINUE
489
+ S2 = FLOAT(M)*A+(.75+FLOAT((M-1)*(M+1)))*DLRBY2
490
+ IF (MBDCND .EQ. 3) S2 = S2+.25*DLRBY2
491
+ S1 = (2.+A2*FLOAT(NUNK-2))*S2
492
+ PERTRB = S/S1
493
+ DO 145 I=MSTART,MSTOP
494
+ DO 144 J=NSTART,NSTOP
495
+ F(I,J) = F(I,J)-PERTRB
496
+ 144 CONTINUE
497
+ 145 CONTINUE
498
+ 146 CONTINUE
499
+ C
500
+ C MULTIPLY I-TH EQUATION THROUGH BY DELTHT**2 TO PUT EQUATION INTO
501
+ C CORRECT FORM FOR SUBROUTINE GENBUN.
502
+ C
503
+ DO 148 I=MSTART,MSTOP
504
+ K = I-MSTART+1
505
+ W(K) = W(K)*DLTHSQ
506
+ J = ID2+K
507
+ W(J) = W(J)*DLTHSQ
508
+ J = ID3+K
509
+ W(J) = W(J)*DLTHSQ
510
+ DO 147 J=NSTART,NSTOP
511
+ F(I,J) = F(I,J)*DLTHSQ
512
+ 147 CONTINUE
513
+ 148 CONTINUE
514
+ W(1) = 0.
515
+ W(ID4) = 0.
516
+ C
517
+ C CALL GENBUN TO SOLVE THE SYSTEM OF EQUATIONS.
518
+ C
519
+ CALL GENBUN (NBDCND,NUNK,1,MUNK,W(1),W(ID2+1),W(ID3+1),IDIMF,
520
+ 1 F(MSTART,NSTART),IERR1,W(ID4+1))
521
+ W(1) = W(ID4+1)+3.*FLOAT(MUNK)
522
+ IF (NBDCND .NE. 0) GO TO 150
523
+ DO 149 I=MSTART,MSTOP
524
+ F(I,NP1) = F(I,1)
525
+ 149 CONTINUE
526
+ 150 CONTINUE
527
+ RETURN
528
+ C
529
+ C REVISION HISTORY---
530
+ C
531
+ C SEPTEMBER 1973 VERSION 1
532
+ C APRIL 1976 VERSION 2
533
+ C JANUARY 1978 VERSION 3
534
+ C DECEMBER 1979 VERSION 3.1
535
+ C FEBRUARY 1985 DOCUMENTATION UPGRADE
536
+ C NOVEMBER 1988 VERSION 3.2, FORTRAN 77 CHANGES
537
+ C-----------------------------------------------------------------------
538
+ END