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