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