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