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.
- PyFishPack/__init__.py +86 -0
- PyFishPack/__pycache__/__init__.cpython-313.pyc +0 -0
- PyFishPack/__pycache__/apps.cpython-313.pyc +0 -0
- PyFishPack/_dummy.c +23 -0
- PyFishPack/_dummy.cp313-win_amd64.pyd +0 -0
- PyFishPack/apps.py +3640 -0
- PyFishPack/fishpack.cp313-win_amd64.dll.a +0 -0
- PyFishPack/fishpack.cp313-win_amd64.pyd +0 -0
- PyFishPack/meson.build +213 -0
- PyFishPack/src/archive/f77/Makefile +19 -0
- PyFishPack/src/archive/f77/blktri.f +1404 -0
- PyFishPack/src/archive/f77/cblktri.f +1414 -0
- PyFishPack/src/archive/f77/cmgnbn.f +1592 -0
- PyFishPack/src/archive/f77/comf.f +186 -0
- PyFishPack/src/archive/f77/fftpack.f +2968 -0
- PyFishPack/src/archive/f77/genbun.f +1335 -0
- PyFishPack/src/archive/f77/gnbnaux.f +314 -0
- PyFishPack/src/archive/f77/hstcrt.f +443 -0
- PyFishPack/src/archive/f77/hstcsp.f +683 -0
- PyFishPack/src/archive/f77/hstcyl.f +485 -0
- PyFishPack/src/archive/f77/hstplr.f +538 -0
- PyFishPack/src/archive/f77/hstssp.f +634 -0
- PyFishPack/src/archive/f77/hw3crt.f +687 -0
- PyFishPack/src/archive/f77/hwscrt.f +512 -0
- PyFishPack/src/archive/f77/hwscsp.f +728 -0
- PyFishPack/src/archive/f77/hwscyl.f +538 -0
- PyFishPack/src/archive/f77/hwsplr.f +602 -0
- PyFishPack/src/archive/f77/hwsssp.f +780 -0
- PyFishPack/src/archive/f77/pois3d.f +550 -0
- PyFishPack/src/archive/f77/poistg.f +875 -0
- PyFishPack/src/archive/f77/sepaux.f +361 -0
- PyFishPack/src/archive/f77/sepeli.f +1029 -0
- PyFishPack/src/archive/f77/sepx4.f +958 -0
- PyFishPack/src/centered_axisymmetric_spherical_solver.f90 +1002 -0
- PyFishPack/src/centered_cartesian_helmholtz_solver_3d.f90 +819 -0
- PyFishPack/src/centered_cartesian_solver.f90 +583 -0
- PyFishPack/src/centered_cylindrical_solver.f90 +634 -0
- PyFishPack/src/centered_helmholtz_solvers.f90 +156 -0
- PyFishPack/src/centered_polar_solver.f90 +746 -0
- PyFishPack/src/centered_real_linear_systems_solver.f90 +280 -0
- PyFishPack/src/centered_spherical_solver.f90 +928 -0
- PyFishPack/src/complex_block_tridiagonal_linear_systems_solver.f90 +1947 -0
- PyFishPack/src/complex_linear_systems_solver.f90 +1787 -0
- PyFishPack/src/fftpack_c_api.f90 +86 -0
- PyFishPack/src/fishpack.f90 +191 -0
- PyFishPack/src/fishpack.pyf +504 -0
- PyFishPack/src/fishpack_c_api.f90 +365 -0
- PyFishPack/src/fishpack_original.pyf +2119 -0
- PyFishPack/src/fishpack_precision.f90 +53 -0
- PyFishPack/src/general_linear_systems_solver_3d.f90 +296 -0
- PyFishPack/src/iterative_solvers.f90 +969 -0
- PyFishPack/src/main.f90 +10 -0
- PyFishPack/src/pyfishpack_module.c +1302 -0
- PyFishPack/src/real_block_tridiagonal_linear_systems_solver.f90 +319 -0
- PyFishPack/src/sepeli.f90 +1454 -0
- PyFishPack/src/sepx4.f90 +1338 -0
- PyFishPack/src/staggered_axisymmetric_spherical_solver.f90 +908 -0
- PyFishPack/src/staggered_cartesian_solver.f90 +553 -0
- PyFishPack/src/staggered_cylindrical_solver.f90 +630 -0
- PyFishPack/src/staggered_helmholtz_solvers.f90 +172 -0
- PyFishPack/src/staggered_polar_solver.f90 +651 -0
- PyFishPack/src/staggered_real_linear_systems_solver.f90 +258 -0
- PyFishPack/src/staggered_spherical_solver.f90 +758 -0
- PyFishPack/src/three_dimensional_solvers.f90 +602 -0
- PyFishPack/src/type_CenteredCyclicReductionUtility.f90 +1714 -0
- PyFishPack/src/type_CyclicReductionUtility.f90 +472 -0
- PyFishPack/src/type_FishpackWorkspace.f90 +290 -0
- PyFishPack/src/type_GeneralizedCyclicReductionUtility.f90 +1980 -0
- PyFishPack/src/type_PeriodicFastFourierTransform.f90 +3789 -0
- PyFishPack/src/type_SepAux.f90 +586 -0
- PyFishPack/src/type_StaggeredCyclicReductionUtility.f90 +893 -0
- pyfishpack-0.1.0.dist-info/DELVEWHEEL +2 -0
- pyfishpack-0.1.0.dist-info/METADATA +81 -0
- pyfishpack-0.1.0.dist-info/RECORD +81 -0
- pyfishpack-0.1.0.dist-info/WHEEL +5 -0
- pyfishpack-0.1.0.dist-info/licenses/LICENSE +21 -0
- pyfishpack-0.1.0.dist-info/top_level.txt +1 -0
- pyfishpack.libs/libgcc_s_seh-1-25d59ccffa1a9009644065b069829e07.dll +0 -0
- pyfishpack.libs/libgfortran-5-08f2195cfa0d823e13371c5c3186a82a.dll +0 -0
- pyfishpack.libs/libquadmath-0-c5abb9113f1ee64b87a889958e4b7418.dll +0 -0
- 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
|