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 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
|