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,780 @@
|
|
|
1
|
+
C
|
|
2
|
+
C file hwsssp.f
|
|
3
|
+
C
|
|
4
|
+
SUBROUTINE HWSSSP (TS,TF,M,MBDCND,BDTS,BDTF,PS,PF,N,NBDCND,BDPS,
|
|
5
|
+
1 BDPF,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 BDTS(N+1), BDTF(N+1), BDPS(M+1), BDPF(M+1),
|
|
40
|
+
C ARGUMENTS F(IDIMF,N+1), W(SEE ARGUMENT LIST)
|
|
41
|
+
C
|
|
42
|
+
C LATEST REVISION NOVEMBER 1988
|
|
43
|
+
C
|
|
44
|
+
C PURPOSE SOLVES A FINITE DIFFERENCE APPROXIMATION TO
|
|
45
|
+
C THE HELMHOLTZ EQUATION IN SPHERICAL
|
|
46
|
+
C COORDINATES AND ON THE SURFACE OF THE UNIT
|
|
47
|
+
C SPHERE (RADIUS OF 1). THE EQUATION IS
|
|
48
|
+
C
|
|
49
|
+
C (1/SIN(THETA))(D/DTHETA)(SIN(THETA)
|
|
50
|
+
C (DU/DTHETA)) + (1/SIN(THETA)**2)(D/DPHI)
|
|
51
|
+
C (DU/DPHI) + LAMBDA*U = F(THETA,PHI)
|
|
52
|
+
C
|
|
53
|
+
C WHERE THETA IS COLATITUDE AND PHI IS
|
|
54
|
+
C LONGITUDE.
|
|
55
|
+
C
|
|
56
|
+
C USAGE CALL HWSSSP (TS,TF,M,MBDCND,BDTS,BDTF,PS,PF,
|
|
57
|
+
C N,NBDCND,BDPS,BDPF,ELMBDA,F,
|
|
58
|
+
C IDIMF,PERTRB,IERROR,W)
|
|
59
|
+
C
|
|
60
|
+
C ARGUMENTS
|
|
61
|
+
C ON INPUT TS,TF
|
|
62
|
+
C
|
|
63
|
+
C THE RANGE OF THETA (COLATITUDE), I.E.,
|
|
64
|
+
C TS .LE. THETA .LE. TF. TS MUST BE LESS
|
|
65
|
+
C THAN TF. TS AND TF ARE IN RADIANS.
|
|
66
|
+
C A TS OF ZERO CORRESPONDS TO THE NORTH
|
|
67
|
+
C POLE AND A TF OF PI CORRESPONDS TO
|
|
68
|
+
C THE SOUTH POLE.
|
|
69
|
+
C
|
|
70
|
+
C * * * IMPORTANT * * *
|
|
71
|
+
C
|
|
72
|
+
C IF TF IS EQUAL TO PI THEN IT MUST BE
|
|
73
|
+
C COMPUTED USING THE STATEMENT
|
|
74
|
+
C TF = PIMACH(DUM). THIS INSURES THAT TF
|
|
75
|
+
C IN THE USER'S PROGRAM IS EQUAL TO PI IN
|
|
76
|
+
C THIS PROGRAM WHICH PERMITS SEVERAL TESTS
|
|
77
|
+
C OF THE INPUT PARAMETERS THAT OTHERWISE
|
|
78
|
+
C WOULD NOT BE POSSIBLE.
|
|
79
|
+
C
|
|
80
|
+
C
|
|
81
|
+
C M
|
|
82
|
+
C THE NUMBER OF PANELS INTO WHICH THE
|
|
83
|
+
C INTERVAL (TS,TF) IS SUBDIVIDED.
|
|
84
|
+
C HENCE, THERE WILL BE M+1 GRID POINTS IN THE
|
|
85
|
+
C THETA-DIRECTION GIVEN BY
|
|
86
|
+
C THETA(I) = (I-1)DTHETA+TS FOR
|
|
87
|
+
C I = 1,2,...,M+1, WHERE
|
|
88
|
+
C DTHETA = (TF-TS)/M IS THE PANEL WIDTH.
|
|
89
|
+
C M MUST BE GREATER THAN 5
|
|
90
|
+
C
|
|
91
|
+
C MBDCND
|
|
92
|
+
C INDICATES THE TYPE OF BOUNDARY CONDITION
|
|
93
|
+
C AT THETA = TS AND THETA = TF.
|
|
94
|
+
C
|
|
95
|
+
C = 1 IF THE SOLUTION IS SPECIFIED AT
|
|
96
|
+
C THETA = TS AND THETA = TF.
|
|
97
|
+
C = 2 IF THE SOLUTION IS SPECIFIED AT
|
|
98
|
+
C THETA = TS AND THE DERIVATIVE OF
|
|
99
|
+
C THE SOLUTION WITH RESPECT TO THETA IS
|
|
100
|
+
C SPECIFIED AT THETA = TF
|
|
101
|
+
C (SEE NOTE 2 BELOW).
|
|
102
|
+
C = 3 IF THE DERIVATIVE OF THE SOLUTION
|
|
103
|
+
C WITH RESPECT TO THETA IS SPECIFIED
|
|
104
|
+
C SPECIFIED AT THETA = TS AND
|
|
105
|
+
C THETA = TF (SEE NOTES 1,2 BELOW).
|
|
106
|
+
C = 4 IF THE DERIVATIVE OF THE SOLUTION
|
|
107
|
+
C WITH RESPECT TO THETA IS SPECIFIED
|
|
108
|
+
C AT THETA = TS (SEE NOTE 1 BELOW)
|
|
109
|
+
C AND THE SOLUTION IS SPECIFIED AT
|
|
110
|
+
C THETA = TF.
|
|
111
|
+
C = 5 IF THE SOLUTION IS UNSPECIFIED AT
|
|
112
|
+
C THETA = TS = 0 AND THE SOLUTION
|
|
113
|
+
C IS SPECIFIED AT THETA = TF.
|
|
114
|
+
C = 6 IF THE SOLUTION IS UNSPECIFIED AT
|
|
115
|
+
C THETA = TS = 0 AND THE DERIVATIVE
|
|
116
|
+
C OF THE SOLUTION WITH RESPECT TO THETA
|
|
117
|
+
C IS SPECIFIED AT THETA = TF
|
|
118
|
+
C (SEE NOTE 2 BELOW).
|
|
119
|
+
C = 7 IF THE SOLUTION IS SPECIFIED AT
|
|
120
|
+
C THETA = TS AND THE SOLUTION IS
|
|
121
|
+
C IS UNSPECIFIED AT THETA = TF = PI.
|
|
122
|
+
C = 8 IF THE DERIVATIVE OF THE SOLUTION
|
|
123
|
+
C WITH RESPECT TO THETA IS SPECIFIED
|
|
124
|
+
C AT THETA = TS (SEE NOTE 1 BELOW) AND
|
|
125
|
+
C THE SOLUTION IS UNSPECIFIED AT
|
|
126
|
+
C THETA = TF = PI.
|
|
127
|
+
C = 9 IF THE SOLUTION IS UNSPECIFIED AT
|
|
128
|
+
C THETA = TS = 0 AND THETA = TF = PI.
|
|
129
|
+
C
|
|
130
|
+
C NOTES:
|
|
131
|
+
C IF TS = 0, DO NOT USE MBDCND = 3,4, OR 8,
|
|
132
|
+
C BUT INSTEAD USE MBDCND = 5,6, OR 9 .
|
|
133
|
+
C
|
|
134
|
+
C IF TF = PI, DO NOT USE MBDCND = 2,3, OR 6,
|
|
135
|
+
C BUT INSTEAD USE MBDCND = 7,8, OR 9 .
|
|
136
|
+
C
|
|
137
|
+
C BDTS
|
|
138
|
+
C A ONE-DIMENSIONAL ARRAY OF LENGTH N+1 THAT
|
|
139
|
+
C SPECIFIES THE VALUES OF THE DERIVATIVE OF
|
|
140
|
+
C THE SOLUTION WITH RESPECT TO THETA AT
|
|
141
|
+
C THETA = TS. WHEN MBDCND = 3,4, OR 8,
|
|
142
|
+
C
|
|
143
|
+
C BDTS(J) = (D/DTHETA)U(TS,PHI(J)),
|
|
144
|
+
C J = 1,2,...,N+1 .
|
|
145
|
+
C
|
|
146
|
+
C WHEN MBDCND HAS ANY OTHER VALUE, BDTS IS
|
|
147
|
+
C A DUMMY VARIABLE.
|
|
148
|
+
C
|
|
149
|
+
C BDTF
|
|
150
|
+
C A ONE-DIMENSIONAL ARRAY OF LENGTH N+1
|
|
151
|
+
C THAT SPECIFIES THE VALUES OF THE DERIVATIVE
|
|
152
|
+
C OF THE SOLUTION WITH RESPECT TO THETA AT
|
|
153
|
+
C THETA = TF. WHEN MBDCND = 2,3, OR 6,
|
|
154
|
+
C
|
|
155
|
+
C BDTF(J) = (D/DTHETA)U(TF,PHI(J)),
|
|
156
|
+
C J = 1,2,...,N+1 .
|
|
157
|
+
C
|
|
158
|
+
C WHEN MBDCND HAS ANY OTHER VALUE, BDTF IS
|
|
159
|
+
C A DUMMY VARIABLE.
|
|
160
|
+
C
|
|
161
|
+
C PS,PF
|
|
162
|
+
C THE RANGE OF PHI (LONGITUDE), I.E.,
|
|
163
|
+
C PS .LE. PHI .LE. PF. PS MUST BE LESS
|
|
164
|
+
C THAN PF. PS AND PF ARE IN RADIANS.
|
|
165
|
+
C IF PS = 0 AND PF = 2*PI, PERIODIC
|
|
166
|
+
C BOUNDARY CONDITIONS ARE USUALLY PRESCRIBED.
|
|
167
|
+
C
|
|
168
|
+
C * * * IMPORTANT * * *
|
|
169
|
+
C
|
|
170
|
+
C IF PF IS EQUAL TO 2*PI THEN IT MUST BE
|
|
171
|
+
C COMPUTED USING THE STATEMENT
|
|
172
|
+
C PF = 2.*PIMACH(DUM). THIS INSURES THAT
|
|
173
|
+
C PF IN THE USERS PROGRAM IS EQUAL TO
|
|
174
|
+
C 2*PI IN THIS PROGRAM WHICH PERMITS TESTS
|
|
175
|
+
C OF THE INPUT PARAMETERS THAT OTHERWISE
|
|
176
|
+
C WOULD NOT BE POSSIBLE.
|
|
177
|
+
C
|
|
178
|
+
C N
|
|
179
|
+
C THE NUMBER OF PANELS INTO WHICH THE
|
|
180
|
+
C INTERVAL (PS,PF) IS SUBDIVIDED.
|
|
181
|
+
C HENCE, THERE WILL BE N+1 GRID POINTS
|
|
182
|
+
C IN THE PHI-DIRECTION GIVEN BY
|
|
183
|
+
C PHI(J) = (J-1)DPHI+PS FOR
|
|
184
|
+
C J = 1,2,...,N+1, WHERE
|
|
185
|
+
C DPHI = (PF-PS)/N IS THE PANEL WIDTH.
|
|
186
|
+
C N MUST BE GREATER THAN 4
|
|
187
|
+
C
|
|
188
|
+
C NBDCND
|
|
189
|
+
C INDICATES THE TYPE OF BOUNDARY CONDITION
|
|
190
|
+
C AT PHI = PS AND PHI = PF.
|
|
191
|
+
C
|
|
192
|
+
C = 0 IF THE SOLUTION IS PERIODIC IN PHI,
|
|
193
|
+
C I.U., U(I,J) = U(I,N+J).
|
|
194
|
+
C = 1 IF THE SOLUTION IS SPECIFIED AT
|
|
195
|
+
C PHI = PS AND PHI = PF
|
|
196
|
+
C (SEE NOTE BELOW).
|
|
197
|
+
C = 2 IF THE SOLUTION IS SPECIFIED AT
|
|
198
|
+
C PHI = PS (SEE NOTE BELOW)
|
|
199
|
+
C AND THE DERIVATIVE OF THE SOLUTION
|
|
200
|
+
C WITH RESPECT TO PHI IS SPECIFIED
|
|
201
|
+
C AT PHI = PF.
|
|
202
|
+
C = 3 IF THE DERIVATIVE OF THE SOLUTION
|
|
203
|
+
C WITH RESPECT TO PHI IS SPECIFIED
|
|
204
|
+
C AT PHI = PS AND PHI = PF.
|
|
205
|
+
C = 4 IF THE DERIVATIVE OF THE SOLUTION
|
|
206
|
+
C WITH RESPECT TO PHI IS SPECIFIED
|
|
207
|
+
C AT PS AND THE SOLUTION IS SPECIFIED
|
|
208
|
+
C AT PHI = PF
|
|
209
|
+
C
|
|
210
|
+
C NOTE:
|
|
211
|
+
C NBDCND = 1,2, OR 4 CANNOT BE USED WITH
|
|
212
|
+
C MBDCND = 5,6,7,8, OR 9. THE FORMER INDICATES
|
|
213
|
+
C THAT THE SOLUTION IS SPECIFIED AT A POLE, THE
|
|
214
|
+
C LATTER INDICATES THAT THE SOLUTION IS NOT
|
|
215
|
+
C SPECIFIED. USE INSTEAD MBDCND = 1 OR 2.
|
|
216
|
+
C
|
|
217
|
+
C BDPS
|
|
218
|
+
C A ONE-DIMENSIONAL ARRAY OF LENGTH M+1 THAT
|
|
219
|
+
C SPECIFIES THE VALUES OF THE DERIVATIVE
|
|
220
|
+
C OF THE SOLUTION WITH RESPECT TO PHI AT
|
|
221
|
+
C PHI = PS. WHEN NBDCND = 3 OR 4,
|
|
222
|
+
C
|
|
223
|
+
C BDPS(I) = (D/DPHI)U(THETA(I),PS),
|
|
224
|
+
C I = 1,2,...,M+1 .
|
|
225
|
+
C
|
|
226
|
+
C WHEN NBDCND HAS ANY OTHER VALUE, BDPS IS
|
|
227
|
+
C A DUMMY VARIABLE.
|
|
228
|
+
C
|
|
229
|
+
C BDPF
|
|
230
|
+
C A ONE-DIMENSIONAL ARRAY OF LENGTH M+1 THAT
|
|
231
|
+
C SPECIFIES THE VALUES OF THE DERIVATIVE
|
|
232
|
+
C OF THE SOLUTION WITH RESPECT TO PHI AT
|
|
233
|
+
C PHI = PF. WHEN NBDCND = 2 OR 3,
|
|
234
|
+
C
|
|
235
|
+
C BDPF(I) = (D/DPHI)U(THETA(I),PF),
|
|
236
|
+
C I = 1,2,...,M+1 .
|
|
237
|
+
C
|
|
238
|
+
C WHEN NBDCND HAS ANY OTHER VALUE, BDPF IS
|
|
239
|
+
C A DUMMY VARIABLE.
|
|
240
|
+
C
|
|
241
|
+
C ELMBDA
|
|
242
|
+
C THE CONSTANT LAMBDA IN THE HELMHOLTZ
|
|
243
|
+
C EQUATION. IF LAMBDA .GT. 0, A SOLUTION
|
|
244
|
+
C MAY NOT EXIST. HOWEVER, HWSSSP WILL
|
|
245
|
+
C ATTEMPT TO FIND A SOLUTION.
|
|
246
|
+
C
|
|
247
|
+
C F
|
|
248
|
+
C A TWO-DIMENSIONAL ARRAY THAT SPECIFIES THE
|
|
249
|
+
C VALUE OF THE RIGHT SIDE OF THE HELMHOLTZ
|
|
250
|
+
C EQUATION AND BOUNDARY VALUES (IF ANY).
|
|
251
|
+
C F MUST BE DIMENSIONED AT LEAST (M+1)*(N+1).
|
|
252
|
+
C
|
|
253
|
+
C ON THE INTERIOR, F IS DEFINED AS FOLLOWS:
|
|
254
|
+
C FOR I = 2,3,...,M AND J = 2,3,...,N
|
|
255
|
+
C F(I,J) = F(THETA(I),PHI(J)).
|
|
256
|
+
C
|
|
257
|
+
C ON THE BOUNDARIES F IS DEFINED AS FOLLOWS:
|
|
258
|
+
C FOR J = 1,2,...,N+1 AND I = 1,2,...,M+1
|
|
259
|
+
C
|
|
260
|
+
C MBDCND F(1,J) F(M+1,J)
|
|
261
|
+
C ------ ------------ ------------
|
|
262
|
+
C
|
|
263
|
+
C 1 U(TS,PHI(J)) U(TF,PHI(J))
|
|
264
|
+
C 2 U(TS,PHI(J)) F(TF,PHI(J))
|
|
265
|
+
C 3 F(TS,PHI(J)) F(TF,PHI(J))
|
|
266
|
+
C 4 F(TS,PHI(J)) U(TF,PHI(J))
|
|
267
|
+
C 5 F(0,PS) U(TF,PHI(J))
|
|
268
|
+
C 6 F(0,PS) F(TF,PHI(J))
|
|
269
|
+
C 7 U(TS,PHI(J)) F(PI,PS)
|
|
270
|
+
C 8 F(TS,PHI(J)) F(PI,PS)
|
|
271
|
+
C 9 F(0,PS) F(PI,PS)
|
|
272
|
+
C
|
|
273
|
+
C NBDCND F(I,1) F(I,N+1)
|
|
274
|
+
C ------ -------------- --------------
|
|
275
|
+
C
|
|
276
|
+
C 0 F(THETA(I),PS) F(THETA(I),PS)
|
|
277
|
+
C 1 U(THETA(I),PS) U(THETA(I),PF)
|
|
278
|
+
C 2 U(THETA(I),PS) F(THETA(I),PF)
|
|
279
|
+
C 3 F(THETA(I),PS) F(THETA(I),PF)
|
|
280
|
+
C 4 F(THETA(I),PS) U(THETA(I),PF)
|
|
281
|
+
C
|
|
282
|
+
C NOTE:
|
|
283
|
+
C IF THE TABLE CALLS FOR BOTH THE SOLUTION U
|
|
284
|
+
C AND THE RIGHT SIDE F AT A CORNER THEN THE
|
|
285
|
+
C SOLUTION MUST BE SPECIFIED.
|
|
286
|
+
C
|
|
287
|
+
C IDIMF
|
|
288
|
+
C THE ROW (OR FIRST) DIMENSION OF THE ARRAY
|
|
289
|
+
C F AS IT APPEARS IN THE PROGRAM CALLING
|
|
290
|
+
C HWSSSP. THIS PARAMETER IS USED TO SPECIFY
|
|
291
|
+
C THE VARIABLE DIMENSION OF F. IDIMF MUST BE
|
|
292
|
+
C AT LEAST M+1 .
|
|
293
|
+
C
|
|
294
|
+
C W
|
|
295
|
+
C A ONE-DIMENSIONAL ARRAY THAT MUST BE
|
|
296
|
+
C PROVIDED BY THE USER FOR WORK SPACE.
|
|
297
|
+
C W MAY REQUIRE UP TO
|
|
298
|
+
C 4*(N+1)+(16+INT(LOG2(N+1)))(M+1) LOCATIONS
|
|
299
|
+
C THE ACTUAL NUMBER OF LOCATIONS USED IS
|
|
300
|
+
C COMPUTED BY HWSSSP AND IS OUTPUT IN
|
|
301
|
+
C LOCATION W(1). INT( ) DENOTES THE
|
|
302
|
+
C FORTRAN INTEGER FUNCTION.
|
|
303
|
+
C
|
|
304
|
+
C
|
|
305
|
+
C ON OUTPUT F
|
|
306
|
+
C CONTAINS THE SOLUTION U(I,J) OF THE FINITE
|
|
307
|
+
C DIFFERENCE APPROXIMATION FOR THE GRID POINT
|
|
308
|
+
C (THETA(I),PHI(J)), I = 1,2,...,M+1 AND
|
|
309
|
+
C J = 1,2,...,N+1 .
|
|
310
|
+
C
|
|
311
|
+
C PERTRB
|
|
312
|
+
C IF ONE SPECIFIES A COMBINATION OF PERIODIC,
|
|
313
|
+
C DERIVATIVE OR UNSPECIFIED BOUNDARY
|
|
314
|
+
C CONDITIONS FOR A POISSON EQUATION
|
|
315
|
+
C (LAMBDA = 0), A SOLUTION MAY NOT EXIST.
|
|
316
|
+
C PERTRB IS A CONSTANT, CALCULATED AND
|
|
317
|
+
C SUBTRACTED FROM F, WHICH ENSURES THAT A
|
|
318
|
+
C SOLUTION EXISTS. HWSSSP THEN COMPUTES
|
|
319
|
+
C THIS SOLUTION, WHICH IS A LEAST SQUARES
|
|
320
|
+
C SOLUTION TO THE ORIGINAL APPROXIMATION.
|
|
321
|
+
C THIS SOLUTION IS NOT UNIQUE AND IS
|
|
322
|
+
C UNNORMALIZED. THE VALUE OF PERTRB SHOULD
|
|
323
|
+
C BE SMALL COMPARED TO THE RIGHT SIDE F.
|
|
324
|
+
C OTHERWISE , A SOLUTION IS OBTAINED TO AN
|
|
325
|
+
C ESSENTIALLY DIFFERENT PROBLEM. THIS
|
|
326
|
+
C COMPARISON SHOULD ALWAYS BE MADE TO INSURE
|
|
327
|
+
C THAT A MEANINGFUL SOLUTION HAS BEEN
|
|
328
|
+
C OBTAINED
|
|
329
|
+
C
|
|
330
|
+
C IERROR
|
|
331
|
+
C AN ERROR FLAG THAT INDICATES INVALID INPUT
|
|
332
|
+
C PARAMETERS. EXCEPT FOR NUMBERS 0 AND 8,
|
|
333
|
+
C A SOLUTION IS NOT ATTEMPTED.
|
|
334
|
+
C
|
|
335
|
+
C = 0 NO ERROR
|
|
336
|
+
C = 1 TS.LT.0 OR TF.GT.PI
|
|
337
|
+
C = 2 TS.GE.TF
|
|
338
|
+
C = 3 MBDCND.LT.1 OR MBDCND.GT.9
|
|
339
|
+
C = 4 PS.LT.0 OR PS.GT.PI+PI
|
|
340
|
+
C = 5 PS.GE.PF
|
|
341
|
+
C = 6 N.LT.5
|
|
342
|
+
C = 7 M.LT.5
|
|
343
|
+
C = 8 NBDCND.LT.0 OR NBDCND.GT.4
|
|
344
|
+
C = 9 ELMBDA.GT.0
|
|
345
|
+
C = 10 IDIMF.LT.M+1
|
|
346
|
+
C = 11 NBDCND EQUALS 1,2 OR 4 AND MBDCND.GE.5
|
|
347
|
+
C = 12 TS.EQ.0 AND MBDCND EQUALS 3,4 OR 8
|
|
348
|
+
C = 13 TF.EQ.PI AND MBDCND EQUALS 2,3 OR 6
|
|
349
|
+
C = 14 MBDCND EQUALS 5,6 OR 9 AND TS.NE.0
|
|
350
|
+
C = 15 MBDCND.GE.7 AND TF.NE.PI
|
|
351
|
+
C
|
|
352
|
+
C SINCE THIS IS THE ONLY MEANS OF INDICATING
|
|
353
|
+
C A POSSIBLY INCORRECT CALL TO HWSSSP, THE
|
|
354
|
+
C USER SHOULD TEST IERROR AFTER A CALL.
|
|
355
|
+
C
|
|
356
|
+
C W
|
|
357
|
+
C CONTAINS INTERMEDIATE VALUES THAT MUST NOT
|
|
358
|
+
C BE DESTROYED IF HWSSSP WILL BE CALLED AGAIN
|
|
359
|
+
C WITH INTL = 1. W(1) CONTAINS THE REQUIRED
|
|
360
|
+
C LENGTH OF W .
|
|
361
|
+
C
|
|
362
|
+
C SPECIAL CONDITIONS NONE
|
|
363
|
+
C
|
|
364
|
+
C I/O NONE
|
|
365
|
+
C
|
|
366
|
+
C PRECISION SINGLE
|
|
367
|
+
C
|
|
368
|
+
C REQUIRED LIBRARY GENBUN, GNBNAUX, AND COMF
|
|
369
|
+
C FILES FROM FISHPACK
|
|
370
|
+
C
|
|
371
|
+
C LANGUAGE FORTRAN
|
|
372
|
+
C
|
|
373
|
+
C HISTORY WRITTEN BY ROLAND SWEET AT NCAR IN THE LATE
|
|
374
|
+
C 1970'S. RELEASED ON NCAR'S PUBLIC SOFTWARE
|
|
375
|
+
C LIBRARIES IN JANUARY 1980.
|
|
376
|
+
C
|
|
377
|
+
C PORTABILITY FORTRAN 77
|
|
378
|
+
C
|
|
379
|
+
C ALGORITHM THE ROUTINE DEFINES THE FINITE DIFFERENCE
|
|
380
|
+
C EQUATIONS, INCORPORATES BOUNDARY DATA, AND
|
|
381
|
+
C ADJUSTS THE RIGHT SIDE OF SINGULAR SYSTEMS
|
|
382
|
+
C AND THEN CALLS GENBUN TO SOLVE THE SYSTEM.
|
|
383
|
+
C
|
|
384
|
+
C TIMING FOR LARGE M AND N, THE OPERATION COUNT
|
|
385
|
+
C IS ROUGHLY PROPORTIONAL TO
|
|
386
|
+
C M*N*(LOG2(N)
|
|
387
|
+
C BUT ALSO DEPENDS ON INPUT PARAMETERS NBDCND
|
|
388
|
+
C AND MBDCND.
|
|
389
|
+
C
|
|
390
|
+
C ACCURACY THE SOLUTION PROCESS EMPLOYED RESULTS IN A LOSS
|
|
391
|
+
C OF NO MORE THAN THREE SIGNIFICANT DIGITS FOR N
|
|
392
|
+
C AND M AS LARGE AS 64. MORE DETAILS ABOUT
|
|
393
|
+
C ACCURACY CAN BE FOUND IN THE DOCUMENTATION FOR
|
|
394
|
+
C SUBROUTINE GENBUN WHICH IS THE ROUTINE THAT
|
|
395
|
+
C SOLVES THE FINITE DIFFERENCE EQUATIONS.
|
|
396
|
+
C
|
|
397
|
+
C REFERENCES P. N. SWARZTRAUBER, "THE DIRECT SOLUTION OF
|
|
398
|
+
C THE DISCRETE POISSON EQUATION ON THE SURFACE OF
|
|
399
|
+
C A SPHERE", S.I.A.M. J. NUMER. ANAL.,15(1974),
|
|
400
|
+
C PP 212-215.
|
|
401
|
+
C
|
|
402
|
+
C SWARZTRAUBER,P. AND R. SWEET, "EFFICIENT
|
|
403
|
+
C FORTRAN SUBPROGRAMS FOR THE SOLUTION OF
|
|
404
|
+
C ELLIPTIC EQUATIONS", NCAR TN/IA-109, JULY,
|
|
405
|
+
C 1975, 138 PP.
|
|
406
|
+
C***********************************************************************
|
|
407
|
+
DIMENSION F(IDIMF,1) ,BDTS(*) ,BDTF(*) ,BDPS(*) ,
|
|
408
|
+
1 BDPF(*) ,W(*)
|
|
409
|
+
C
|
|
410
|
+
NBR = NBDCND+1
|
|
411
|
+
PI = PIMACH(DUM)
|
|
412
|
+
TPI = 2.*PI
|
|
413
|
+
IERROR = 0
|
|
414
|
+
IF (TS.LT.0. .OR. TF.GT.PI) IERROR = 1
|
|
415
|
+
IF (TS .GE. TF) IERROR = 2
|
|
416
|
+
IF (MBDCND.LT.1 .OR. MBDCND.GT.9) IERROR = 3
|
|
417
|
+
IF (PS.LT.0. .OR. PF.GT.TPI) IERROR = 4
|
|
418
|
+
IF (PS .GE. PF) IERROR = 5
|
|
419
|
+
IF (N .LT. 5) IERROR = 6
|
|
420
|
+
IF (M .LT. 5) IERROR = 7
|
|
421
|
+
IF (NBDCND.LT.0 .OR. NBDCND.GT.4) IERROR = 8
|
|
422
|
+
IF (ELMBDA .GT. 0.) IERROR = 9
|
|
423
|
+
IF (IDIMF .LT. M+1) IERROR = 10
|
|
424
|
+
IF ((NBDCND.EQ.1 .OR. NBDCND.EQ.2 .OR. NBDCND.EQ.4) .AND.
|
|
425
|
+
1 MBDCND.GE.5) IERROR = 11
|
|
426
|
+
IF (TS.EQ.0. .AND.
|
|
427
|
+
1 (MBDCND.EQ.3 .OR. MBDCND.EQ.4 .OR. MBDCND.EQ.8)) IERROR = 12
|
|
428
|
+
IF (TF.EQ.PI .AND.
|
|
429
|
+
1 (MBDCND.EQ.2 .OR. MBDCND.EQ.3 .OR. MBDCND.EQ.6)) IERROR = 13
|
|
430
|
+
IF ((MBDCND.EQ.5 .OR. MBDCND.EQ.6 .OR. MBDCND.EQ.9) .AND.
|
|
431
|
+
1 TS.NE.0.) IERROR = 14
|
|
432
|
+
IF (MBDCND.GE.7 .AND. TF.NE.PI) IERROR = 15
|
|
433
|
+
IF (IERROR.NE.0 .AND. IERROR.NE.9) RETURN
|
|
434
|
+
CALL HWSSS1 (TS,TF,M,MBDCND,BDTS,BDTF,PS,PF,N,NBDCND,BDPS,BDPF,
|
|
435
|
+
1 ELMBDA,F,IDIMF,PERTRB,W,W(M+2),W(2*M+3),W(3*M+4),
|
|
436
|
+
2 W(4*M+5),W(5*M+6),W(6*M+7))
|
|
437
|
+
W(1) = W(6*M+7)+FLOAT(6*(M+1))
|
|
438
|
+
RETURN
|
|
439
|
+
END
|
|
440
|
+
SUBROUTINE HWSSS1 (TS,TF,M,MBDCND,BDTS,BDTF,PS,PF,N,NBDCND,BDPS,
|
|
441
|
+
1 BDPF,ELMBDA,F,IDIMF,PERTRB,AM,BM,CM,SN,SS,
|
|
442
|
+
2 SINT,D)
|
|
443
|
+
DIMENSION F(IDIMF,*) ,BDTS(*) ,BDTF(*) ,BDPS(*) ,
|
|
444
|
+
1 BDPF(*) ,AM(*) ,BM(*) ,CM(*) ,
|
|
445
|
+
2 SS(*) ,SN(*) ,D(*) ,SINT(*)
|
|
446
|
+
C
|
|
447
|
+
PI = PIMACH(DUM)
|
|
448
|
+
TPI = PI+PI
|
|
449
|
+
HPI = PI/2.
|
|
450
|
+
MP1 = M+1
|
|
451
|
+
NP1 = N+1
|
|
452
|
+
FN = N
|
|
453
|
+
FM = M
|
|
454
|
+
DTH = (TF-TS)/FM
|
|
455
|
+
HDTH = DTH/2.
|
|
456
|
+
TDT = DTH+DTH
|
|
457
|
+
DPHI = (PF-PS)/FN
|
|
458
|
+
TDP = DPHI+DPHI
|
|
459
|
+
DPHI2 = DPHI*DPHI
|
|
460
|
+
EDP2 = ELMBDA*DPHI2
|
|
461
|
+
DTH2 = DTH*DTH
|
|
462
|
+
CP = 4./(FN*DTH2)
|
|
463
|
+
WP = FN*SIN(HDTH)/4.
|
|
464
|
+
DO 102 I=1,MP1
|
|
465
|
+
FIM1 = I-1
|
|
466
|
+
THETA = FIM1*DTH+TS
|
|
467
|
+
SINT(I) = SIN(THETA)
|
|
468
|
+
IF (SINT(I)) 101,102,101
|
|
469
|
+
101 T1 = 1./(DTH2*SINT(I))
|
|
470
|
+
AM(I) = T1*SIN(THETA-HDTH)
|
|
471
|
+
CM(I) = T1*SIN(THETA+HDTH)
|
|
472
|
+
BM(I) = -AM(I)-CM(I)+ELMBDA
|
|
473
|
+
102 CONTINUE
|
|
474
|
+
INP = 0
|
|
475
|
+
ISP = 0
|
|
476
|
+
C
|
|
477
|
+
C BOUNDARY CONDITION AT THETA=TS
|
|
478
|
+
C
|
|
479
|
+
MBR = MBDCND+1
|
|
480
|
+
GO TO (103,104,104,105,105,106,106,104,105,106),MBR
|
|
481
|
+
103 ITS = 1
|
|
482
|
+
GO TO 107
|
|
483
|
+
104 AT = AM(2)
|
|
484
|
+
ITS = 2
|
|
485
|
+
GO TO 107
|
|
486
|
+
105 AT = AM(1)
|
|
487
|
+
ITS = 1
|
|
488
|
+
CM(1) = AM(1)+CM(1)
|
|
489
|
+
GO TO 107
|
|
490
|
+
106 AT = AM(2)
|
|
491
|
+
INP = 1
|
|
492
|
+
ITS = 2
|
|
493
|
+
C
|
|
494
|
+
C BOUNDARY CONDITION THETA=TF
|
|
495
|
+
C
|
|
496
|
+
107 GO TO (108,109,110,110,109,109,110,111,111,111),MBR
|
|
497
|
+
108 ITF = M
|
|
498
|
+
GO TO 112
|
|
499
|
+
109 CT = CM(M)
|
|
500
|
+
ITF = M
|
|
501
|
+
GO TO 112
|
|
502
|
+
110 CT = CM(M+1)
|
|
503
|
+
AM(M+1) = AM(M+1)+CM(M+1)
|
|
504
|
+
ITF = M+1
|
|
505
|
+
GO TO 112
|
|
506
|
+
111 ITF = M
|
|
507
|
+
ISP = 1
|
|
508
|
+
CT = CM(M)
|
|
509
|
+
C
|
|
510
|
+
C COMPUTE HOMOGENEOUS SOLUTION WITH SOLUTION AT POLE EQUAL TO ONE
|
|
511
|
+
C
|
|
512
|
+
112 ITSP = ITS+1
|
|
513
|
+
ITFM = ITF-1
|
|
514
|
+
WTS = SINT(ITS+1)*AM(ITS+1)/CM(ITS)
|
|
515
|
+
WTF = SINT(ITF-1)*CM(ITF-1)/AM(ITF)
|
|
516
|
+
MUNK = ITF-ITS+1
|
|
517
|
+
IF (ISP) 116,116,113
|
|
518
|
+
113 D(ITS) = CM(ITS)/BM(ITS)
|
|
519
|
+
DO 114 I=ITSP,M
|
|
520
|
+
D(I) = CM(I)/(BM(I)-AM(I)*D(I-1))
|
|
521
|
+
114 CONTINUE
|
|
522
|
+
SS(M) = -D(M)
|
|
523
|
+
IID = M-ITS
|
|
524
|
+
DO 115 II=1,IID
|
|
525
|
+
I = M-II
|
|
526
|
+
SS(I) = -D(I)*SS(I+1)
|
|
527
|
+
115 CONTINUE
|
|
528
|
+
SS(M+1) = 1.
|
|
529
|
+
116 IF (INP) 120,120,117
|
|
530
|
+
117 SN(1) = 1.
|
|
531
|
+
D(ITF) = AM(ITF)/BM(ITF)
|
|
532
|
+
IID = ITF-2
|
|
533
|
+
DO 118 II=1,IID
|
|
534
|
+
I = ITF-II
|
|
535
|
+
D(I) = AM(I)/(BM(I)-CM(I)*D(I+1))
|
|
536
|
+
118 CONTINUE
|
|
537
|
+
SN(2) = -D(2)
|
|
538
|
+
DO 119 I=3,ITF
|
|
539
|
+
SN(I) = -D(I)*SN(I-1)
|
|
540
|
+
119 CONTINUE
|
|
541
|
+
C
|
|
542
|
+
C BOUNDARY CONDITIONS AT PHI=PS
|
|
543
|
+
C
|
|
544
|
+
120 NBR = NBDCND+1
|
|
545
|
+
WPS = 1.
|
|
546
|
+
WPF = 1.
|
|
547
|
+
GO TO (121,122,122,123,123),NBR
|
|
548
|
+
121 JPS = 1
|
|
549
|
+
GO TO 124
|
|
550
|
+
122 JPS = 2
|
|
551
|
+
GO TO 124
|
|
552
|
+
123 JPS = 1
|
|
553
|
+
WPS = .5
|
|
554
|
+
C
|
|
555
|
+
C BOUNDARY CONDITION AT PHI=PF
|
|
556
|
+
C
|
|
557
|
+
124 GO TO (125,126,127,127,126),NBR
|
|
558
|
+
125 JPF = N
|
|
559
|
+
GO TO 128
|
|
560
|
+
126 JPF = N
|
|
561
|
+
GO TO 128
|
|
562
|
+
127 WPF = .5
|
|
563
|
+
JPF = N+1
|
|
564
|
+
128 JPSP = JPS+1
|
|
565
|
+
JPFM = JPF-1
|
|
566
|
+
NUNK = JPF-JPS+1
|
|
567
|
+
FJJ = JPFM-JPSP+1
|
|
568
|
+
C
|
|
569
|
+
C SCALE COEFFICIENTS FOR SUBROUTINE GENBUN
|
|
570
|
+
C
|
|
571
|
+
DO 129 I=ITS,ITF
|
|
572
|
+
CF = DPHI2*SINT(I)*SINT(I)
|
|
573
|
+
AM(I) = CF*AM(I)
|
|
574
|
+
BM(I) = CF*BM(I)
|
|
575
|
+
CM(I) = CF*CM(I)
|
|
576
|
+
129 CONTINUE
|
|
577
|
+
AM(ITS) = 0.
|
|
578
|
+
CM(ITF) = 0.
|
|
579
|
+
ISING = 0
|
|
580
|
+
GO TO (130,138,138,130,138,138,130,138,130,130),MBR
|
|
581
|
+
130 GO TO (131,138,138,131,138),NBR
|
|
582
|
+
131 IF (ELMBDA) 138,132,132
|
|
583
|
+
132 ISING = 1
|
|
584
|
+
SUM = WTS*WPS+WTS*WPF+WTF*WPS+WTF*WPF
|
|
585
|
+
IF (INP) 134,134,133
|
|
586
|
+
133 SUM = SUM+WP
|
|
587
|
+
134 IF (ISP) 136,136,135
|
|
588
|
+
135 SUM = SUM+WP
|
|
589
|
+
136 SUM1 = 0.
|
|
590
|
+
DO 137 I=ITSP,ITFM
|
|
591
|
+
SUM1 = SUM1+SINT(I)
|
|
592
|
+
137 CONTINUE
|
|
593
|
+
SUM = SUM+FJJ*(SUM1+WTS+WTF)
|
|
594
|
+
SUM = SUM+(WPS+WPF)*SUM1
|
|
595
|
+
HNE = SUM
|
|
596
|
+
138 GO TO (146,142,142,144,144,139,139,142,144,139),MBR
|
|
597
|
+
139 IF (NBDCND-3) 146,140,146
|
|
598
|
+
140 YHLD = F(1,JPS)-4./(FN*DPHI*DTH2)*(BDPF(2)-BDPS(2))
|
|
599
|
+
DO 141 J=1,NP1
|
|
600
|
+
F(1,J) = YHLD
|
|
601
|
+
141 CONTINUE
|
|
602
|
+
GO TO 146
|
|
603
|
+
142 DO 143 J=JPS,JPF
|
|
604
|
+
F(2,J) = F(2,J)-AT*F(1,J)
|
|
605
|
+
143 CONTINUE
|
|
606
|
+
GO TO 146
|
|
607
|
+
144 DO 145 J=JPS,JPF
|
|
608
|
+
F(1,J) = F(1,J)+TDT*BDTS(J)*AT
|
|
609
|
+
145 CONTINUE
|
|
610
|
+
146 GO TO (154,150,152,152,150,150,152,147,147,147),MBR
|
|
611
|
+
147 IF (NBDCND-3) 154,148,154
|
|
612
|
+
148 YHLD = F(M+1,JPS)-4./(FN*DPHI*DTH2)*(BDPF(M)-BDPS(M))
|
|
613
|
+
DO 149 J=1,NP1
|
|
614
|
+
F(M+1,J) = YHLD
|
|
615
|
+
149 CONTINUE
|
|
616
|
+
GO TO 154
|
|
617
|
+
150 DO 151 J=JPS,JPF
|
|
618
|
+
F(M,J) = F(M,J)-CT*F(M+1,J)
|
|
619
|
+
151 CONTINUE
|
|
620
|
+
GO TO 154
|
|
621
|
+
152 DO 153 J=JPS,JPF
|
|
622
|
+
F(M+1,J) = F(M+1,J)-TDT*BDTF(J)*CT
|
|
623
|
+
153 CONTINUE
|
|
624
|
+
154 GO TO (159,155,155,157,157),NBR
|
|
625
|
+
155 DO 156 I=ITS,ITF
|
|
626
|
+
F(I,2) = F(I,2)-F(I,1)/(DPHI2*SINT(I)*SINT(I))
|
|
627
|
+
156 CONTINUE
|
|
628
|
+
GO TO 159
|
|
629
|
+
157 DO 158 I=ITS,ITF
|
|
630
|
+
F(I,1) = F(I,1)+TDP*BDPS(I)/(DPHI2*SINT(I)*SINT(I))
|
|
631
|
+
158 CONTINUE
|
|
632
|
+
159 GO TO (164,160,162,162,160),NBR
|
|
633
|
+
160 DO 161 I=ITS,ITF
|
|
634
|
+
F(I,N) = F(I,N)-F(I,N+1)/(DPHI2*SINT(I)*SINT(I))
|
|
635
|
+
161 CONTINUE
|
|
636
|
+
GO TO 164
|
|
637
|
+
162 DO 163 I=ITS,ITF
|
|
638
|
+
F(I,N+1) = F(I,N+1)-TDP*BDPF(I)/(DPHI2*SINT(I)*SINT(I))
|
|
639
|
+
163 CONTINUE
|
|
640
|
+
164 CONTINUE
|
|
641
|
+
PERTRB = 0.
|
|
642
|
+
IF (ISING) 165,176,165
|
|
643
|
+
165 SUM = WTS*WPS*F(ITS,JPS)+WTS*WPF*F(ITS,JPF)+WTF*WPS*F(ITF,JPS)+
|
|
644
|
+
1 WTF*WPF*F(ITF,JPF)
|
|
645
|
+
IF (INP) 167,167,166
|
|
646
|
+
166 SUM = SUM+WP*F(1,JPS)
|
|
647
|
+
167 IF (ISP) 169,169,168
|
|
648
|
+
168 SUM = SUM+WP*F(M+1,JPS)
|
|
649
|
+
169 DO 171 I=ITSP,ITFM
|
|
650
|
+
SUM1 = 0.
|
|
651
|
+
DO 170 J=JPSP,JPFM
|
|
652
|
+
SUM1 = SUM1+F(I,J)
|
|
653
|
+
170 CONTINUE
|
|
654
|
+
SUM = SUM+SINT(I)*SUM1
|
|
655
|
+
171 CONTINUE
|
|
656
|
+
SUM1 = 0.
|
|
657
|
+
SUM2 = 0.
|
|
658
|
+
DO 172 J=JPSP,JPFM
|
|
659
|
+
SUM1 = SUM1+F(ITS,J)
|
|
660
|
+
SUM2 = SUM2+F(ITF,J)
|
|
661
|
+
172 CONTINUE
|
|
662
|
+
SUM = SUM+WTS*SUM1+WTF*SUM2
|
|
663
|
+
SUM1 = 0.
|
|
664
|
+
SUM2 = 0.
|
|
665
|
+
DO 173 I=ITSP,ITFM
|
|
666
|
+
SUM1 = SUM1+SINT(I)*F(I,JPS)
|
|
667
|
+
SUM2 = SUM2+SINT(I)*F(I,JPF)
|
|
668
|
+
173 CONTINUE
|
|
669
|
+
SUM = SUM+WPS*SUM1+WPF*SUM2
|
|
670
|
+
PERTRB = SUM/HNE
|
|
671
|
+
DO 175 J=1,NP1
|
|
672
|
+
DO 174 I=1,MP1
|
|
673
|
+
F(I,J) = F(I,J)-PERTRB
|
|
674
|
+
174 CONTINUE
|
|
675
|
+
175 CONTINUE
|
|
676
|
+
C
|
|
677
|
+
C SCALE RIGHT SIDE FOR SUBROUTINE GENBUN
|
|
678
|
+
C
|
|
679
|
+
176 DO 178 I=ITS,ITF
|
|
680
|
+
CF = DPHI2*SINT(I)*SINT(I)
|
|
681
|
+
DO 177 J=JPS,JPF
|
|
682
|
+
F(I,J) = CF*F(I,J)
|
|
683
|
+
177 CONTINUE
|
|
684
|
+
178 CONTINUE
|
|
685
|
+
CALL GENBUN (NBDCND,NUNK,1,MUNK,AM(ITS),BM(ITS),CM(ITS),IDIMF,
|
|
686
|
+
1 F(ITS,JPS),IERROR,D)
|
|
687
|
+
IF (ISING) 186,186,179
|
|
688
|
+
179 IF (INP) 183,183,180
|
|
689
|
+
180 IF (ISP) 181,181,186
|
|
690
|
+
181 DO 182 J=1,NP1
|
|
691
|
+
F(1,J) = 0.
|
|
692
|
+
182 CONTINUE
|
|
693
|
+
GO TO 209
|
|
694
|
+
183 IF (ISP) 186,186,184
|
|
695
|
+
184 DO 185 J=1,NP1
|
|
696
|
+
F(M+1,J) = 0.
|
|
697
|
+
185 CONTINUE
|
|
698
|
+
GO TO 209
|
|
699
|
+
186 IF (INP) 193,193,187
|
|
700
|
+
187 SUM = WPS*F(ITS,JPS)+WPF*F(ITS,JPF)
|
|
701
|
+
DO 188 J=JPSP,JPFM
|
|
702
|
+
SUM = SUM+F(ITS,J)
|
|
703
|
+
188 CONTINUE
|
|
704
|
+
DFN = CP*SUM
|
|
705
|
+
DNN = CP*((WPS+WPF+FJJ)*(SN(2)-1.))+ELMBDA
|
|
706
|
+
DSN = CP*(WPS+WPF+FJJ)*SN(M)
|
|
707
|
+
IF (ISP) 189,189,194
|
|
708
|
+
189 CNP = (F(1,1)-DFN)/DNN
|
|
709
|
+
DO 191 I=ITS,ITF
|
|
710
|
+
HLD = CNP*SN(I)
|
|
711
|
+
DO 190 J=JPS,JPF
|
|
712
|
+
F(I,J) = F(I,J)+HLD
|
|
713
|
+
190 CONTINUE
|
|
714
|
+
191 CONTINUE
|
|
715
|
+
DO 192 J=1,NP1
|
|
716
|
+
F(1,J) = CNP
|
|
717
|
+
192 CONTINUE
|
|
718
|
+
GO TO 209
|
|
719
|
+
193 IF (ISP) 209,209,194
|
|
720
|
+
194 SUM = WPS*F(ITF,JPS)+WPF*F(ITF,JPF)
|
|
721
|
+
DO 195 J=JPSP,JPFM
|
|
722
|
+
SUM = SUM+F(ITF,J)
|
|
723
|
+
195 CONTINUE
|
|
724
|
+
DFS = CP*SUM
|
|
725
|
+
DSS = CP*((WPS+WPF+FJJ)*(SS(M)-1.))+ELMBDA
|
|
726
|
+
DNS = CP*(WPS+WPF+FJJ)*SS(2)
|
|
727
|
+
IF (INP) 196,196,200
|
|
728
|
+
196 CSP = (F(M+1,1)-DFS)/DSS
|
|
729
|
+
DO 198 I=ITS,ITF
|
|
730
|
+
HLD = CSP*SS(I)
|
|
731
|
+
DO 197 J=JPS,JPF
|
|
732
|
+
F(I,J) = F(I,J)+HLD
|
|
733
|
+
197 CONTINUE
|
|
734
|
+
198 CONTINUE
|
|
735
|
+
DO 199 J=1,NP1
|
|
736
|
+
F(M+1,J) = CSP
|
|
737
|
+
199 CONTINUE
|
|
738
|
+
GO TO 209
|
|
739
|
+
200 RTN = F(1,1)-DFN
|
|
740
|
+
RTS = F(M+1,1)-DFS
|
|
741
|
+
IF (ISING) 202,202,201
|
|
742
|
+
201 CSP = 0.
|
|
743
|
+
CNP = RTN/DNN
|
|
744
|
+
GO TO 205
|
|
745
|
+
202 IF (ABS(DNN)-ABS(DSN)) 204,204,203
|
|
746
|
+
203 DEN = DSS-DNS*DSN/DNN
|
|
747
|
+
RTS = RTS-RTN*DSN/DNN
|
|
748
|
+
CSP = RTS/DEN
|
|
749
|
+
CNP = (RTN-CSP*DNS)/DNN
|
|
750
|
+
GO TO 205
|
|
751
|
+
204 DEN = DNS-DSS*DNN/DSN
|
|
752
|
+
RTN = RTN-RTS*DNN/DSN
|
|
753
|
+
CSP = RTN/DEN
|
|
754
|
+
CNP = (RTS-DSS*CSP)/DSN
|
|
755
|
+
205 DO 207 I=ITS,ITF
|
|
756
|
+
HLD = CNP*SN(I)+CSP*SS(I)
|
|
757
|
+
DO 206 J=JPS,JPF
|
|
758
|
+
F(I,J) = F(I,J)+HLD
|
|
759
|
+
206 CONTINUE
|
|
760
|
+
207 CONTINUE
|
|
761
|
+
DO 208 J=1,NP1
|
|
762
|
+
F(1,J) = CNP
|
|
763
|
+
F(M+1,J) = CSP
|
|
764
|
+
208 CONTINUE
|
|
765
|
+
209 IF (NBDCND) 212,210,212
|
|
766
|
+
210 DO 211 I=1,MP1
|
|
767
|
+
F(I,JPF+1) = F(I,JPS)
|
|
768
|
+
211 CONTINUE
|
|
769
|
+
212 RETURN
|
|
770
|
+
C
|
|
771
|
+
C REVISION HISTORY---
|
|
772
|
+
C
|
|
773
|
+
C SEPTEMBER 1973 VERSION 1
|
|
774
|
+
C APRIL 1976 VERSION 2
|
|
775
|
+
C JANUARY 1978 VERSION 3
|
|
776
|
+
C DECEMBER 1979 VERSION 3.1
|
|
777
|
+
C FEBRUARY 1985 DOCUMENTATION UPGRADE
|
|
778
|
+
C NOVEMBER 1988 VERSION 3.2, FORTRAN 77 CHANGES
|
|
779
|
+
C-----------------------------------------------------------------------
|
|
780
|
+
END
|