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,1029 @@
|
|
|
1
|
+
C
|
|
2
|
+
C file sepeli.f
|
|
3
|
+
C
|
|
4
|
+
SUBROUTINE SEPELI (INTL,IORDER,A,B,M,MBDCND,BDA,ALPHA,BDB,BETA,C,
|
|
5
|
+
1 D,N,NBDCND,BDC,GAMA,BDD,XNU,COFX,COFY,GRHS,
|
|
6
|
+
2 USOL,IDMN,W,PERTRB,IERROR)
|
|
7
|
+
C
|
|
8
|
+
C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
9
|
+
C * *
|
|
10
|
+
C * copyright (c) 1999 by UCAR *
|
|
11
|
+
C * *
|
|
12
|
+
C * UNIVERSITY CORPORATION for ATMOSPHERIC RESEARCH *
|
|
13
|
+
C * *
|
|
14
|
+
C * all rights reserved *
|
|
15
|
+
C * *
|
|
16
|
+
C * FISHPACK version 4.1 *
|
|
17
|
+
C * *
|
|
18
|
+
C * A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE SOLUTION OF *
|
|
19
|
+
C * *
|
|
20
|
+
C * SEPARABLE ELLIPTIC PARTIAL DIFFERENTIAL EQUATIONS *
|
|
21
|
+
C * *
|
|
22
|
+
C * BY *
|
|
23
|
+
C * *
|
|
24
|
+
C * JOHN ADAMS, PAUL SWARZTRAUBER AND ROLAND SWEET *
|
|
25
|
+
C * *
|
|
26
|
+
C * OF *
|
|
27
|
+
C * *
|
|
28
|
+
C * THE NATIONAL CENTER FOR ATMOSPHERIC RESEARCH *
|
|
29
|
+
C * *
|
|
30
|
+
C * BOULDER, COLORADO (80307) U.S.A. *
|
|
31
|
+
C * *
|
|
32
|
+
C * WHICH IS SPONSORED BY *
|
|
33
|
+
C * *
|
|
34
|
+
C * THE NATIONAL SCIENCE FOUNDATION *
|
|
35
|
+
C * *
|
|
36
|
+
C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
37
|
+
C
|
|
38
|
+
C
|
|
39
|
+
C
|
|
40
|
+
C DIMENSION OF BDA(N+1), BDB(N+1), BDC(M+1), BDD(M+1),
|
|
41
|
+
C ARGUMENTS USOL(IDMN,N+1),GRHS(IDMN,N+1),
|
|
42
|
+
C W (SEE ARGUMENT LIST)
|
|
43
|
+
C
|
|
44
|
+
C LATEST REVISION NOVEMBER 1988
|
|
45
|
+
C
|
|
46
|
+
C PURPOSE SEPELI SOLVES FOR EITHER THE SECOND-ORDER
|
|
47
|
+
C FINITE DIFFERENCE APPROXIMATION OR A
|
|
48
|
+
C FOURTH-ORDER APPROXIMATION TO A SEPARABLE
|
|
49
|
+
C ELLIPTIC EQUATION
|
|
50
|
+
C
|
|
51
|
+
C 2 2
|
|
52
|
+
C AF(X)*D U/DX + BF(X)*DU/DX + CF(X)*U +
|
|
53
|
+
C 2 2
|
|
54
|
+
C DF(Y)*D U/DY + EF(Y)*DU/DY + FF(Y)*U
|
|
55
|
+
C
|
|
56
|
+
C = G(X,Y)
|
|
57
|
+
C
|
|
58
|
+
C ON A RECTANGLE (X GREATER THAN OR EQUAL TO A
|
|
59
|
+
C AND LESS THAN OR EQUAL TO B; Y GREATER THAN
|
|
60
|
+
C OR EQUAL TO C AND LESS THAN OR EQUAL TO D).
|
|
61
|
+
C ANY COMBINATION OF PERIODIC OR MIXED BOUNDARY
|
|
62
|
+
C CONDITIONS IS ALLOWED.
|
|
63
|
+
C
|
|
64
|
+
C THE POSSIBLE BOUNDARY CONDITIONS ARE:
|
|
65
|
+
C IN THE X-DIRECTION:
|
|
66
|
+
C (0) PERIODIC, U(X+B-A,Y)=U(X,Y) FOR ALL
|
|
67
|
+
C Y,X (1) U(A,Y), U(B,Y) ARE SPECIFIED FOR
|
|
68
|
+
C ALL Y
|
|
69
|
+
C (2) U(A,Y), DU(B,Y)/DX+BETA*U(B,Y) ARE
|
|
70
|
+
C SPECIFIED FOR ALL Y
|
|
71
|
+
C (3) DU(A,Y)/DX+ALPHA*U(A,Y),DU(B,Y)/DX+
|
|
72
|
+
C BETA*U(B,Y) ARE SPECIFIED FOR ALL Y
|
|
73
|
+
C (4) DU(A,Y)/DX+ALPHA*U(A,Y),U(B,Y) ARE
|
|
74
|
+
C SPECIFIED FOR ALL Y
|
|
75
|
+
C
|
|
76
|
+
C IN THE Y-DIRECTION:
|
|
77
|
+
C (0) PERIODIC, U(X,Y+D-C)=U(X,Y) FOR ALL X,Y
|
|
78
|
+
C (1) U(X,C),U(X,D) ARE SPECIFIED FOR ALL X
|
|
79
|
+
C (2) U(X,C),DU(X,D)/DY+XNU*U(X,D) ARE
|
|
80
|
+
C SPECIFIED FOR ALL X
|
|
81
|
+
C (3) DU(X,C)/DY+GAMA*U(X,C),DU(X,D)/DY+
|
|
82
|
+
C XNU*U(X,D) ARE SPECIFIED FOR ALL X
|
|
83
|
+
C (4) DU(X,C)/DY+GAMA*U(X,C),U(X,D) ARE
|
|
84
|
+
C SPECIFIED FOR ALL X
|
|
85
|
+
C
|
|
86
|
+
C USAGE CALL SEPELI (INTL,IORDER,A,B,M,MBDCND,BDA,
|
|
87
|
+
C ALPHA,BDB,BETA,C,D,N,NBDCND,BDC,
|
|
88
|
+
C GAMA,BDD,XNU,COFX,COFY,GRHS,USOL,
|
|
89
|
+
C IDMN,W,PERTRB,IERROR)
|
|
90
|
+
C
|
|
91
|
+
C ARGUMENTS
|
|
92
|
+
C ON INPUT INTL
|
|
93
|
+
C = 0 ON INITIAL ENTRY TO SEPELI OR IF ANY
|
|
94
|
+
C OF THE ARGUMENTS C,D, N, NBDCND, COFY
|
|
95
|
+
C ARE CHANGED FROM A PREVIOUS CALL
|
|
96
|
+
C = 1 IF C, D, N, NBDCND, COFY ARE UNCHANGED
|
|
97
|
+
C FROM THE PREVIOUS CALL.
|
|
98
|
+
C
|
|
99
|
+
C IORDER
|
|
100
|
+
C = 2 IF A SECOND-ORDER APPROXIMATION
|
|
101
|
+
C IS SOUGHT
|
|
102
|
+
C = 4 IF A FOURTH-ORDER APPROXIMATION
|
|
103
|
+
C IS SOUGHT
|
|
104
|
+
C
|
|
105
|
+
C A,B
|
|
106
|
+
C THE RANGE OF THE X-INDEPENDENT VARIABLE,
|
|
107
|
+
C I.E., X IS GREATER THAN OR EQUAL TO A
|
|
108
|
+
C AND LESS THAN OR EQUAL TO B. A MUST BE
|
|
109
|
+
C LESS THAN B.
|
|
110
|
+
C
|
|
111
|
+
C M
|
|
112
|
+
C THE NUMBER OF PANELS INTO WHICH THE
|
|
113
|
+
C INTERVAL [A,B] IS SUBDIVIDED. HENCE,
|
|
114
|
+
C THERE WILL BE M+1 GRID POINTS IN THE X-
|
|
115
|
+
C DIRECTION GIVEN BY XI=A+(I-1)*DLX
|
|
116
|
+
C FOR I=1,2,...,M+1 WHERE DLX=(B-A)/M IS
|
|
117
|
+
C THE PANEL WIDTH. M MUST BE LESS THAN
|
|
118
|
+
C IDMN AND GREATER THAN 5.
|
|
119
|
+
C
|
|
120
|
+
C MBDCND
|
|
121
|
+
C INDICATES THE TYPE OF BOUNDARY CONDITION
|
|
122
|
+
C AT X=A AND X=B
|
|
123
|
+
C
|
|
124
|
+
C = 0 IF THE SOLUTION IS PERIODIC IN X, I.E.,
|
|
125
|
+
C U(X+B-A,Y)=U(X,Y) FOR ALL Y,X
|
|
126
|
+
C = 1 IF THE SOLUTION IS SPECIFIED AT X=A
|
|
127
|
+
C AND X=B, I.E., U(A,Y) AND U(B,Y) ARE
|
|
128
|
+
C SPECIFIED FOR ALL Y
|
|
129
|
+
C = 2 IF THE SOLUTION IS SPECIFIED AT X=A AND
|
|
130
|
+
C THE BOUNDARY CONDITION IS MIXED AT X=B,
|
|
131
|
+
C I.E., U(A,Y) AND DU(B,Y)/DX+BETA*U(B,Y)
|
|
132
|
+
C ARE SPECIFIED FOR ALL Y
|
|
133
|
+
C = 3 IF THE BOUNDARY CONDITIONS AT X=A AND
|
|
134
|
+
C X=B ARE MIXED, I.E.,
|
|
135
|
+
C DU(A,Y)/DX+ALPHA*U(A,Y) AND
|
|
136
|
+
C DU(B,Y)/DX+BETA*U(B,Y) ARE SPECIFIED
|
|
137
|
+
C FOR ALL Y
|
|
138
|
+
C = 4 IF THE BOUNDARY CONDITION AT X=A IS
|
|
139
|
+
C MIXED AND THE SOLUTION IS SPECIFIED
|
|
140
|
+
C AT X=B, I.E., DU(A,Y)/DX+ALPHA*U(A,Y)
|
|
141
|
+
C AND U(B,Y) ARE SPECIFIED FOR ALL Y
|
|
142
|
+
C
|
|
143
|
+
C BDA
|
|
144
|
+
C A ONE-DIMENSIONAL ARRAY OF LENGTH N+1
|
|
145
|
+
C THAT SPECIFIES THE VALUES OF
|
|
146
|
+
C DU(A,Y)/DX+ ALPHA*U(A,Y) AT X=A, WHEN
|
|
147
|
+
C MBDCND=3 OR 4.
|
|
148
|
+
C BDA(J) = DU(A,YJ)/DX+ALPHA*U(A,YJ),
|
|
149
|
+
C J=1,2,...,N+1. WHEN MBDCND HAS ANY OTHER
|
|
150
|
+
C OTHER VALUE, BDA IS A DUMMY PARAMETER.
|
|
151
|
+
C
|
|
152
|
+
C ALPHA
|
|
153
|
+
C THE SCALAR MULTIPLYING THE SOLUTION IN
|
|
154
|
+
C CASE OF A MIXED BOUNDARY CONDITION AT X=A
|
|
155
|
+
C (SEE ARGUMENT BDA). IF MBDCND IS NOT
|
|
156
|
+
C EQUAL TO 3 OR 4 THEN ALPHA IS A DUMMY
|
|
157
|
+
C PARAMETER.
|
|
158
|
+
C
|
|
159
|
+
C BDB
|
|
160
|
+
C A ONE-DIMENSIONAL ARRAY OF LENGTH N+1
|
|
161
|
+
C THAT SPECIFIES THE VALUES OF
|
|
162
|
+
C DU(B,Y)/DX+ BETA*U(B,Y) AT X=B.
|
|
163
|
+
C WHEN MBDCND=2 OR 3
|
|
164
|
+
C BDB(J) = DU(B,YJ)/DX+BETA*U(B,YJ),
|
|
165
|
+
C J=1,2,...,N+1. WHEN MBDCND HAS ANY OTHER
|
|
166
|
+
C OTHER VALUE, BDB IS A DUMMY PARAMETER.
|
|
167
|
+
C
|
|
168
|
+
C BETA
|
|
169
|
+
C THE SCALAR MULTIPLYING THE SOLUTION IN
|
|
170
|
+
C CASE OF A MIXED BOUNDARY CONDITION AT
|
|
171
|
+
C X=B (SEE ARGUMENT BDB). IF MBDCND IS
|
|
172
|
+
C NOT EQUAL TO 2 OR 3 THEN BETA IS A DUMMY
|
|
173
|
+
C PARAMETER.
|
|
174
|
+
C
|
|
175
|
+
C C,D
|
|
176
|
+
C THE RANGE OF THE Y-INDEPENDENT VARIABLE,
|
|
177
|
+
C I.E., Y IS GREATER THAN OR EQUAL TO C
|
|
178
|
+
C AND LESS THAN OR EQUAL TO D. C MUST BE
|
|
179
|
+
C LESS THAN D.
|
|
180
|
+
C
|
|
181
|
+
C N
|
|
182
|
+
C THE NUMBER OF PANELS INTO WHICH THE
|
|
183
|
+
C INTERVAL [C,D] IS SUBDIVIDED.
|
|
184
|
+
C HENCE, THERE WILL BE N+1 GRID POINTS
|
|
185
|
+
C IN THE Y-DIRECTION GIVEN BY
|
|
186
|
+
C YJ=C+(J-1)*DLY FOR J=1,2,...,N+1 WHERE
|
|
187
|
+
C DLY=(D-C)/N IS THE PANEL WIDTH.
|
|
188
|
+
C IN ADDITION, N MUST BE GREATER THAN 4.
|
|
189
|
+
C
|
|
190
|
+
C NBDCND
|
|
191
|
+
C INDICATES THE TYPES OF BOUNDARY CONDITIONS
|
|
192
|
+
C AT Y=C AND Y=D
|
|
193
|
+
C
|
|
194
|
+
C = 0 IF THE SOLUTION IS PERIODIC IN Y,
|
|
195
|
+
C I.E., U(X,Y+D-C)=U(X,Y) FOR ALL X,Y
|
|
196
|
+
C = 1 IF THE SOLUTION IS SPECIFIED AT Y=C
|
|
197
|
+
C AND Y = D, I.E., U(X,C) AND U(X,D)
|
|
198
|
+
C ARE SPECIFIED FOR ALL X
|
|
199
|
+
C = 2 IF THE SOLUTION IS SPECIFIED AT Y=C
|
|
200
|
+
C AND THE BOUNDARY CONDITION IS MIXED
|
|
201
|
+
C AT Y=D, I.E., U(X,C) AND
|
|
202
|
+
C DU(X,D)/DY+XNU*U(X,D) ARE SPECIFIED
|
|
203
|
+
C FOR ALL X
|
|
204
|
+
C = 3 IF THE BOUNDARY CONDITIONS ARE MIXED
|
|
205
|
+
C AT Y=C AND Y=D, I.E.,
|
|
206
|
+
C DU(X,D)/DY+GAMA*U(X,C) AND
|
|
207
|
+
C DU(X,D)/DY+XNU*U(X,D) ARE SPECIFIED
|
|
208
|
+
C FOR ALL X
|
|
209
|
+
C = 4 IF THE BOUNDARY CONDITION IS MIXED
|
|
210
|
+
C AT Y=C AND THE SOLUTION IS SPECIFIED
|
|
211
|
+
C AT Y=D, I.E. DU(X,C)/DY+GAMA*U(X,C)
|
|
212
|
+
C AND U(X,D) ARE SPECIFIED FOR ALL X
|
|
213
|
+
C
|
|
214
|
+
C BDC
|
|
215
|
+
C A ONE-DIMENSIONAL ARRAY OF LENGTH M+1
|
|
216
|
+
C THAT SPECIFIES THE VALUE OF
|
|
217
|
+
C DU(X,C)/DY+GAMA*U(X,C) AT Y=C.
|
|
218
|
+
C WHEN NBDCND=3 OR 4 BDC(I) = DU(XI,C)/DY +
|
|
219
|
+
C GAMA*U(XI,C), I=1,2,...,M+1.
|
|
220
|
+
C WHEN NBDCND HAS ANY OTHER VALUE, BDC
|
|
221
|
+
C IS A DUMMY PARAMETER.
|
|
222
|
+
C
|
|
223
|
+
C GAMA
|
|
224
|
+
C THE SCALAR MULTIPLYING THE SOLUTION IN
|
|
225
|
+
C CASE OF A MIXED BOUNDARY CONDITION AT
|
|
226
|
+
C Y=C (SEE ARGUMENT BDC). IF NBDCND IS
|
|
227
|
+
C NOT EQUAL TO 3 OR 4 THEN GAMA IS A DUMMY
|
|
228
|
+
C PARAMETER.
|
|
229
|
+
C
|
|
230
|
+
C BDD
|
|
231
|
+
C A ONE-DIMENSIONAL ARRAY OF LENGTH M+1
|
|
232
|
+
C THAT SPECIFIES THE VALUE OF
|
|
233
|
+
C DU(X,D)/DY + XNU*U(X,D) AT Y=C.
|
|
234
|
+
C WHEN NBDCND=2 OR 3 BDD(I) = DU(XI,D)/DY +
|
|
235
|
+
C XNU*U(XI,D), I=1,2,...,M+1.
|
|
236
|
+
C WHEN NBDCND HAS ANY OTHER VALUE, BDD
|
|
237
|
+
C IS A DUMMY PARAMETER.
|
|
238
|
+
C
|
|
239
|
+
C XNU
|
|
240
|
+
C THE SCALAR MULTIPLYING THE SOLUTION IN
|
|
241
|
+
C CASE OF A MIXED BOUNDARY CONDITION AT
|
|
242
|
+
C Y=D (SEE ARGUMENT BDD). IF NBDCND IS
|
|
243
|
+
C NOT EQUAL TO 2 OR 3 THEN XNU IS A
|
|
244
|
+
C DUMMY PARAMETER.
|
|
245
|
+
C
|
|
246
|
+
C COFX
|
|
247
|
+
C A USER-SUPPLIED SUBPROGRAM WITH
|
|
248
|
+
C PARAMETERS X, AFUN, BFUN, CFUN WHICH
|
|
249
|
+
C RETURNS THE VALUES OF THE X-DEPENDENT
|
|
250
|
+
C COEFFICIENTS AF(X), BF(X), CF(X) IN THE
|
|
251
|
+
C ELLIPTIC EQUATION AT X.
|
|
252
|
+
C
|
|
253
|
+
C COFY
|
|
254
|
+
C A USER-SUPPLIED SUBPROGRAM WITH PARAMETERS
|
|
255
|
+
C Y, DFUN, EFUN, FFUN WHICH RETURNS THE
|
|
256
|
+
C VALUES OF THE Y-DEPENDENT COEFFICIENTS
|
|
257
|
+
C DF(Y), EF(Y), FF(Y) IN THE ELLIPTIC
|
|
258
|
+
C EQUATION AT Y.
|
|
259
|
+
C
|
|
260
|
+
C NOTE: COFX AND COFY MUST BE DECLARED
|
|
261
|
+
C EXTERNAL IN THE CALLING ROUTINE.
|
|
262
|
+
C THE VALUES RETURNED IN AFUN AND DFUN
|
|
263
|
+
C MUST SATISFY AFUN*DFUN GREATER THAN 0
|
|
264
|
+
C FOR A LESS THAN X LESS THAN B, C LESS
|
|
265
|
+
C THAN Y LESS THAN D (SEE IERROR=10).
|
|
266
|
+
C THE COEFFICIENTS PROVIDED MAY LEAD TO A
|
|
267
|
+
C MATRIX EQUATION WHICH IS NOT DIAGONALLY
|
|
268
|
+
C DOMINANT IN WHICH CASE SOLUTION MAY FAIL
|
|
269
|
+
C (SEE IERROR=4).
|
|
270
|
+
C
|
|
271
|
+
C GRHS
|
|
272
|
+
C A TWO-DIMENSIONAL ARRAY THAT SPECIFIES THE
|
|
273
|
+
C VALUES OF THE RIGHT-HAND SIDE OF THE
|
|
274
|
+
C ELLIPTIC EQUATION, I.E.,
|
|
275
|
+
C GRHS(I,J)=G(XI,YI), FOR I=2,...,M,
|
|
276
|
+
C J=2,...,N. AT THE BOUNDARIES, GRHS IS
|
|
277
|
+
C DEFINED BY
|
|
278
|
+
C
|
|
279
|
+
C MBDCND GRHS(1,J) GRHS(M+1,J)
|
|
280
|
+
C ------ --------- -----------
|
|
281
|
+
C 0 G(A,YJ) G(B,YJ)
|
|
282
|
+
C 1 * *
|
|
283
|
+
C 2 * G(B,YJ) J=1,2,...,N+1
|
|
284
|
+
C 3 G(A,YJ) G(B,YJ)
|
|
285
|
+
C 4 G(A,YJ) *
|
|
286
|
+
C
|
|
287
|
+
C NBDCND GRHS(I,1) GRHS(I,N+1)
|
|
288
|
+
C ------ --------- -----------
|
|
289
|
+
C 0 G(XI,C) G(XI,D)
|
|
290
|
+
C 1 * *
|
|
291
|
+
C 2 * G(XI,D) I=1,2,...,M+1
|
|
292
|
+
C 3 G(XI,C) G(XI,D)
|
|
293
|
+
C 4 G(XI,C) *
|
|
294
|
+
C
|
|
295
|
+
C WHERE * MEANS THESE QUANTITIES ARE NOT USED.
|
|
296
|
+
C GRHS SHOULD BE DIMENSIONED IDMN BY AT LEAST
|
|
297
|
+
C N+1 IN THE CALLING ROUTINE.
|
|
298
|
+
C
|
|
299
|
+
C USOL
|
|
300
|
+
C A TWO-DIMENSIONAL ARRAY THAT SPECIFIES THE
|
|
301
|
+
C VALUES OF THE SOLUTION ALONG THE BOUNDARIES.
|
|
302
|
+
C AT THE BOUNDARIES, USOL IS DEFINED BY
|
|
303
|
+
C
|
|
304
|
+
C MBDCND USOL(1,J) USOL(M+1,J)
|
|
305
|
+
C ------ --------- -----------
|
|
306
|
+
C 0 * *
|
|
307
|
+
C 1 U(A,YJ) U(B,YJ)
|
|
308
|
+
C 2 U(A,YJ) * J=1,2,...,N+1
|
|
309
|
+
C 3 * *
|
|
310
|
+
C 4 * U(B,YJ)
|
|
311
|
+
C
|
|
312
|
+
C NBDCND USOL(I,1) USOL(I,N+1)
|
|
313
|
+
C ------ --------- -----------
|
|
314
|
+
C 0 * *
|
|
315
|
+
C 1 U(XI,C) U(XI,D)
|
|
316
|
+
C 2 U(XI,C) * I=1,2,...,M+1
|
|
317
|
+
C 3 * *
|
|
318
|
+
C 4 * U(XI,D)
|
|
319
|
+
C
|
|
320
|
+
C WHERE * MEANS THE QUANTITIES ARE NOT USED
|
|
321
|
+
C IN THE SOLUTION.
|
|
322
|
+
C
|
|
323
|
+
C IF IORDER=2, THE USER MAY EQUIVALENCE GRHS
|
|
324
|
+
C AND USOL TO SAVE SPACE. NOTE THAT IN THIS
|
|
325
|
+
C CASE THE TABLES SPECIFYING THE BOUNDARIES
|
|
326
|
+
C OF THE GRHS AND USOL ARRAYS DETERMINE THE
|
|
327
|
+
C BOUNDARIES UNIQUELY EXCEPT AT THE CORNERS.
|
|
328
|
+
C IF THE TABLES CALL FOR BOTH G(X,Y) AND
|
|
329
|
+
C U(X,Y) AT A CORNER THEN THE SOLUTION MUST
|
|
330
|
+
C BE CHOSEN. FOR EXAMPLE, IF MBDCND=2 AND
|
|
331
|
+
C NBDCND=4, THEN U(A,C), U(A,D), U(B,D) MUST
|
|
332
|
+
C BE CHOSEN AT THE CORNERS IN ADDITION
|
|
333
|
+
C TO G(B,C).
|
|
334
|
+
C
|
|
335
|
+
C IF IORDER=4, THEN THE TWO ARRAYS, USOL AND
|
|
336
|
+
C GRHS, MUST BE DISTINCT.
|
|
337
|
+
C
|
|
338
|
+
C USOL SHOULD BE DIMENSIONED IDMN BY AT LEAST
|
|
339
|
+
C N+1 IN THE CALLING ROUTINE.
|
|
340
|
+
C
|
|
341
|
+
C IDMN
|
|
342
|
+
C THE ROW (OR FIRST) DIMENSION OF THE ARRAYS
|
|
343
|
+
C GRHS AND USOL AS IT APPEARS IN THE PROGRAM
|
|
344
|
+
C CALLING SEPELI. THIS PARAMETER IS USED
|
|
345
|
+
C TO SPECIFY THE VARIABLE DIMENSION OF GRHS
|
|
346
|
+
C AND USOL. IDMN MUST BE AT LEAST 7 AND
|
|
347
|
+
C GREATER THAN OR EQUAL TO M+1.
|
|
348
|
+
C
|
|
349
|
+
C W
|
|
350
|
+
C A ONE-DIMENSIONAL ARRAY THAT MUST BE
|
|
351
|
+
C PROVIDED BY THE USER FOR WORK SPACE.
|
|
352
|
+
C LET K=INT(LOG2(N+1))+1 AND SET L=2**(K+1).
|
|
353
|
+
C THEN (K-2)*L+K+10*N+12*M+27 WILL SUFFICE
|
|
354
|
+
C AS A LENGTH OF W. THE ACTUAL LENGTH OF W
|
|
355
|
+
C IN THE CALLING ROUTINE MUST BE SET IN W(1)
|
|
356
|
+
C (SEE IERROR=11).
|
|
357
|
+
C
|
|
358
|
+
C ON OUTPUT USOL
|
|
359
|
+
C CONTAINS THE APPROXIMATE SOLUTION TO THE
|
|
360
|
+
C ELLIPTIC EQUATION.
|
|
361
|
+
C USOL(I,J) IS THE APPROXIMATION TO U(XI,YJ)
|
|
362
|
+
C FOR I=1,2...,M+1 AND J=1,2,...,N+1.
|
|
363
|
+
C THE APPROXIMATION HAS ERROR
|
|
364
|
+
C O(DLX**2+DLY**2) IF CALLED WITH IORDER=2
|
|
365
|
+
C AND O(DLX**4+DLY**4) IF CALLED WITH
|
|
366
|
+
C IORDER=4.
|
|
367
|
+
C
|
|
368
|
+
C W
|
|
369
|
+
C CONTAINS INTERMEDIATE VALUES THAT MUST NOT
|
|
370
|
+
C BE DESTROYED IF SEPELI IS CALLED AGAIN WITH
|
|
371
|
+
C INTL=1. IN ADDITION W(1) CONTAINS THE
|
|
372
|
+
C EXACT MINIMAL LENGTH (IN FLOATING POINT)
|
|
373
|
+
C REQUIRED FOR THE WORK SPACE (SEE IERROR=11).
|
|
374
|
+
C
|
|
375
|
+
C PERTRB
|
|
376
|
+
C IF A COMBINATION OF PERIODIC OR DERIVATIVE
|
|
377
|
+
C BOUNDARY CONDITIONS
|
|
378
|
+
C (I.E., ALPHA=BETA=0 IF MBDCND=3;
|
|
379
|
+
C GAMA=XNU=0 IF NBDCND=3) IS SPECIFIED
|
|
380
|
+
C AND IF THE COEFFICIENTS OF U(X,Y) IN THE
|
|
381
|
+
C SEPARABLE ELLIPTIC EQUATION ARE ZERO
|
|
382
|
+
C (I.E., CF(X)=0 FOR X GREATER THAN OR EQUAL
|
|
383
|
+
C TO A AND LESS THAN OR EQUAL TO B;
|
|
384
|
+
C FF(Y)=0 FOR Y GREATER THAN OR EQUAL TO C
|
|
385
|
+
C AND LESS THAN OR EQUAL TO D) THEN A
|
|
386
|
+
C SOLUTION MAY NOT EXIST. PERTRB IS A
|
|
387
|
+
C CONSTANT CALCULATED AND SUBTRACTED FROM
|
|
388
|
+
C THE RIGHT-HAND SIDE OF THE MATRIX EQUATIONS
|
|
389
|
+
C GENERATED BY SEPELI WHICH INSURES THAT A
|
|
390
|
+
C SOLUTION EXISTS. SEPELI THEN COMPUTES THIS
|
|
391
|
+
C SOLUTION WHICH IS A WEIGHTED MINIMAL LEAST
|
|
392
|
+
C SQUARES SOLUTION TO THE ORIGINAL PROBLEM.
|
|
393
|
+
C
|
|
394
|
+
C IERROR
|
|
395
|
+
C AN ERROR FLAG THAT INDICATES INVALID INPUT
|
|
396
|
+
C PARAMETERS OR FAILURE TO FIND A SOLUTION
|
|
397
|
+
C = 0 NO ERROR
|
|
398
|
+
C = 1 IF A GREATER THAN B OR C GREATER THAN D
|
|
399
|
+
C = 2 IF MBDCND LESS THAN 0 OR MBDCND GREATER
|
|
400
|
+
C THAN 4
|
|
401
|
+
C = 3 IF NBDCND LESS THAN 0 OR NBDCND GREATER
|
|
402
|
+
C THAN 4
|
|
403
|
+
C = 4 IF ATTEMPT TO FIND A SOLUTION FAILS.
|
|
404
|
+
C (THE LINEAR SYSTEM GENERATED IS NOT
|
|
405
|
+
C DIAGONALLY DOMINANT.)
|
|
406
|
+
C = 5 IF IDMN IS TOO SMALL
|
|
407
|
+
C (SEE DISCUSSION OF IDMN)
|
|
408
|
+
C = 6 IF M IS TOO SMALL OR TOO LARGE
|
|
409
|
+
C (SEE DISCUSSION OF M)
|
|
410
|
+
C = 7 IF N IS TOO SMALL (SEE DISCUSSION OF N)
|
|
411
|
+
C = 8 IF IORDER IS NOT 2 OR 4
|
|
412
|
+
C = 9 IF INTL IS NOT 0 OR 1
|
|
413
|
+
C = 10 IF AFUN*DFUN LESS THAN OR EQUAL TO 0
|
|
414
|
+
C FOR SOME INTERIOR MESH POINT (XI,YJ)
|
|
415
|
+
C = 11 IF THE WORK SPACE LENGTH INPUT IN W(1)
|
|
416
|
+
C IS LESS THAN THE EXACT MINIMAL WORK
|
|
417
|
+
C SPACE LENGTH REQUIRED OUTPUT IN W(1).
|
|
418
|
+
C
|
|
419
|
+
C NOTE (CONCERNING IERROR=4): FOR THE
|
|
420
|
+
C COEFFICIENTS INPUT THROUGH COFX, COFY,
|
|
421
|
+
C THE DISCRETIZATION MAY LEAD TO A BLOCK
|
|
422
|
+
C TRIDIAGONAL LINEAR SYSTEM WHICH IS NOT
|
|
423
|
+
C DIAGONALLY DOMINANT (FOR EXAMPLE, THIS
|
|
424
|
+
C HAPPENS IF CFUN=0 AND BFUN/(2.*DLX) GREATER
|
|
425
|
+
C THAN AFUN/DLX**2). IN THIS CASE SOLUTION
|
|
426
|
+
C MAY FAIL. THIS CANNOT HAPPEN IN THE LIMIT
|
|
427
|
+
C AS DLX, DLY APPROACH ZERO. HENCE, THE
|
|
428
|
+
C CONDITION MAY BE REMEDIED BY TAKING LARGER
|
|
429
|
+
C VALUES FOR M OR N.
|
|
430
|
+
C
|
|
431
|
+
C SPECIAL CONDITIONS SEE COFX, COFY ARGUMENT DESCRIPTIONS ABOVE.
|
|
432
|
+
C
|
|
433
|
+
C I/O NONE
|
|
434
|
+
C
|
|
435
|
+
C PRECISION SINGLE
|
|
436
|
+
C
|
|
437
|
+
C REQUIRED LIBRARY BLKTRI, COMF, AND SEPAUX
|
|
438
|
+
C FILES FROM FISHPACK
|
|
439
|
+
C
|
|
440
|
+
C LANGUAGE FORTRAN
|
|
441
|
+
C
|
|
442
|
+
C HISTORY DEVELOPED AT NCAR DURING 1975-76 BY
|
|
443
|
+
C JOHN C. ADAMS OF THE SCIENTIFIC COMPUTING
|
|
444
|
+
C DIVISION. RELEASED ON NCAR'S PUBLIC SOFTWARE
|
|
445
|
+
C LIBRARIES IN JANUARY 1980.
|
|
446
|
+
C
|
|
447
|
+
C PORTABILITY FORTRAN 77
|
|
448
|
+
C
|
|
449
|
+
C ALGORITHM SEPELI AUTOMATICALLY DISCRETIZES THE
|
|
450
|
+
C SEPARABLE ELLIPTIC EQUATION WHICH IS THEN
|
|
451
|
+
C SOLVED BY A GENERALIZED CYCLIC REDUCTION
|
|
452
|
+
C ALGORITHM IN THE SUBROUTINE, BLKTRI. THE
|
|
453
|
+
C FOURTH-ORDER SOLUTION IS OBTAINED USING
|
|
454
|
+
C 'DEFERRED CORRECTIONS' WHICH IS DESCRIBED
|
|
455
|
+
C AND REFERENCED IN SECTIONS, REFERENCES AND
|
|
456
|
+
C METHOD.
|
|
457
|
+
C
|
|
458
|
+
C TIMING THE OPERATIONAL COUNT IS PROPORTIONAL TO
|
|
459
|
+
C M*N*LOG2(N).
|
|
460
|
+
C
|
|
461
|
+
C ACCURACY THE FOLLOWING ACCURACY RESULTS WERE OBTAINED
|
|
462
|
+
C ON A CDC 7600. NOTE THAT THE FOURTH-ORDER
|
|
463
|
+
C ACCURACY IS NOT REALIZED UNTIL THE MESH IS
|
|
464
|
+
C SUFFICIENTLY REFINED.
|
|
465
|
+
C
|
|
466
|
+
C SECOND-ORDER FOURTH-ORDER
|
|
467
|
+
C M N ERROR ERROR
|
|
468
|
+
C
|
|
469
|
+
C 6 6 6.8E-1 1.2E0
|
|
470
|
+
C 14 14 1.4E-1 1.8E-1
|
|
471
|
+
C 30 30 3.2E-2 9.7E-3
|
|
472
|
+
C 62 62 7.5E-3 3.0E-4
|
|
473
|
+
C 126 126 1.8E-3 3.5E-6
|
|
474
|
+
C
|
|
475
|
+
C
|
|
476
|
+
C REFERENCES KELLER, H.B., NUMERICAL METHODS FOR TWO-POINT
|
|
477
|
+
C BOUNDARY-VALUE PROBLEMS, BLAISDEL (1968),
|
|
478
|
+
C WALTHAM, MASS.
|
|
479
|
+
C
|
|
480
|
+
C SWARZTRAUBER, P., AND R. SWEET (1975):
|
|
481
|
+
C EFFICIENT FORTRAN SUBPROGRAMS FOR THE
|
|
482
|
+
C SOLUTION OF ELLIPTIC PARTIAL DIFFERENTIAL
|
|
483
|
+
C EQUATIONS. NCAR TECHNICAL NOTE
|
|
484
|
+
C NCAR-TN/IA-109, PP. 135-137.
|
|
485
|
+
C***********************************************************************
|
|
486
|
+
DIMENSION GRHS(IDMN,1) ,USOL(IDMN,1)
|
|
487
|
+
DIMENSION BDA(*) ,BDB(*) ,BDC(*) ,BDD(*) ,
|
|
488
|
+
1 W(*)
|
|
489
|
+
EXTERNAL COFX ,COFY
|
|
490
|
+
C
|
|
491
|
+
C CHECK INPUT PARAMETERS
|
|
492
|
+
C
|
|
493
|
+
CALL CHKPRM (INTL,IORDER,A,B,M,MBDCND,C,D,N,NBDCND,COFX,COFY,
|
|
494
|
+
1 IDMN,IERROR)
|
|
495
|
+
IF (IERROR .NE. 0) RETURN
|
|
496
|
+
C
|
|
497
|
+
C COMPUTE MINIMUM WORK SPACE AND CHECK WORK SPACE LENGTH INPUT
|
|
498
|
+
C
|
|
499
|
+
L = N+1
|
|
500
|
+
IF (NBDCND .EQ. 0) L = N
|
|
501
|
+
LOGB2N = INT(ALOG(FLOAT(L)+0.5)/ALOG(2.0))+1
|
|
502
|
+
LL = 2**(LOGB2N+1)
|
|
503
|
+
K = M+1
|
|
504
|
+
L = N+1
|
|
505
|
+
LENGTH = (LOGB2N-2)*LL+LOGB2N+MAX0(2*L,6*K)+5
|
|
506
|
+
IF (NBDCND .EQ. 0) LENGTH = LENGTH+2*L
|
|
507
|
+
IERROR = 11
|
|
508
|
+
LINPUT = INT(W(1)+0.5)
|
|
509
|
+
LOUTPT = LENGTH+6*(K+L)+1
|
|
510
|
+
W(1) = FLOAT(LOUTPT)
|
|
511
|
+
IF (LOUTPT .GT. LINPUT) RETURN
|
|
512
|
+
IERROR = 0
|
|
513
|
+
C
|
|
514
|
+
C SET WORK SPACE INDICES
|
|
515
|
+
C
|
|
516
|
+
I1 = LENGTH+2
|
|
517
|
+
I2 = I1+L
|
|
518
|
+
I3 = I2+L
|
|
519
|
+
I4 = I3+L
|
|
520
|
+
I5 = I4+L
|
|
521
|
+
I6 = I5+L
|
|
522
|
+
I7 = I6+L
|
|
523
|
+
I8 = I7+K
|
|
524
|
+
I9 = I8+K
|
|
525
|
+
I10 = I9+K
|
|
526
|
+
I11 = I10+K
|
|
527
|
+
I12 = I11+K
|
|
528
|
+
I13 = 2
|
|
529
|
+
CALL SPELIP (INTL,IORDER,A,B,M,MBDCND,BDA,ALPHA,BDB,BETA,C,D,N,
|
|
530
|
+
1 NBDCND,BDC,GAMA,BDD,XNU,COFX,COFY,W(I1),W(I2),W(I3),
|
|
531
|
+
2 W(I4),W(I5),W(I6),W(I7),W(I8),W(I9),W(I10),W(I11),
|
|
532
|
+
3 W(I12),GRHS,USOL,IDMN,W(I13),PERTRB,IERROR)
|
|
533
|
+
RETURN
|
|
534
|
+
END
|
|
535
|
+
SUBROUTINE SPELIP (INTL,IORDER,A,B,M,MBDCND,BDA,ALPHA,BDB,BETA,C,
|
|
536
|
+
1 D,N,NBDCND,BDC,GAMA,BDD,XNU,COFX,COFY,AN,BN,
|
|
537
|
+
2 CN,DN,UN,ZN,AM,BM,CM,DM,UM,ZM,GRHS,USOL,IDMN,
|
|
538
|
+
3 W,PERTRB,IERROR)
|
|
539
|
+
C
|
|
540
|
+
C SPELIP SETS UP VECTORS AND ARRAYS FOR INPUT TO BLKTRI
|
|
541
|
+
C AND COMPUTES A SECOND ORDER SOLUTION IN USOL. A RETURN JUMP TO
|
|
542
|
+
C SEPELI OCCURRS IF IORDER=2. IF IORDER=4 A FOURTH ORDER
|
|
543
|
+
C SOLUTION IS GENERATED IN USOL.
|
|
544
|
+
C
|
|
545
|
+
DIMENSION BDA(*) ,BDB(*) ,BDC(*) ,BDD(*) ,
|
|
546
|
+
1 W(*)
|
|
547
|
+
DIMENSION GRHS(IDMN,1) ,USOL(IDMN,1)
|
|
548
|
+
DIMENSION AN(*) ,BN(*) ,CN(*) ,DN(*) ,
|
|
549
|
+
1 UN(*) ,ZN(*)
|
|
550
|
+
DIMENSION AM(*) ,BM(*) ,CM(*) ,DM(*) ,
|
|
551
|
+
1 UM(*) ,ZM(*)
|
|
552
|
+
COMMON /SPLP/ KSWX ,KSWY ,K ,L ,
|
|
553
|
+
1 AIT ,BIT ,CIT ,DIT ,
|
|
554
|
+
2 MIT ,NIT ,IS ,MS ,
|
|
555
|
+
3 JS ,NS ,DLX ,DLY ,
|
|
556
|
+
4 TDLX3 ,TDLY3 ,DLX4 ,DLY4
|
|
557
|
+
LOGICAL SINGLR
|
|
558
|
+
EXTERNAL COFX ,COFY
|
|
559
|
+
C
|
|
560
|
+
C SET PARAMETERS INTERNALLY
|
|
561
|
+
C
|
|
562
|
+
KSWX = MBDCND+1
|
|
563
|
+
KSWY = NBDCND+1
|
|
564
|
+
K = M+1
|
|
565
|
+
L = N+1
|
|
566
|
+
AIT = A
|
|
567
|
+
BIT = B
|
|
568
|
+
CIT = C
|
|
569
|
+
DIT = D
|
|
570
|
+
C
|
|
571
|
+
C SET RIGHT HAND SIDE VALUES FROM GRHS IN USOL ON THE INTERIOR
|
|
572
|
+
C AND NON-SPECIFIED BOUNDARIES.
|
|
573
|
+
C
|
|
574
|
+
DO 20 I=2,M
|
|
575
|
+
DO 10 J=2,N
|
|
576
|
+
USOL(I,J) = GRHS(I,J)
|
|
577
|
+
10 CONTINUE
|
|
578
|
+
20 CONTINUE
|
|
579
|
+
IF (KSWX.EQ.2 .OR. KSWX.EQ.3) GO TO 40
|
|
580
|
+
DO 30 J=2,N
|
|
581
|
+
USOL(1,J) = GRHS(1,J)
|
|
582
|
+
30 CONTINUE
|
|
583
|
+
40 CONTINUE
|
|
584
|
+
IF (KSWX.EQ.2 .OR. KSWX.EQ.5) GO TO 60
|
|
585
|
+
DO 50 J=2,N
|
|
586
|
+
USOL(K,J) = GRHS(K,J)
|
|
587
|
+
50 CONTINUE
|
|
588
|
+
60 CONTINUE
|
|
589
|
+
IF (KSWY.EQ.2 .OR. KSWY.EQ.3) GO TO 80
|
|
590
|
+
DO 70 I=2,M
|
|
591
|
+
USOL(I,1) = GRHS(I,1)
|
|
592
|
+
70 CONTINUE
|
|
593
|
+
80 CONTINUE
|
|
594
|
+
IF (KSWY.EQ.2 .OR. KSWY.EQ.5) GO TO 100
|
|
595
|
+
DO 90 I=2,M
|
|
596
|
+
USOL(I,L) = GRHS(I,L)
|
|
597
|
+
90 CONTINUE
|
|
598
|
+
100 CONTINUE
|
|
599
|
+
IF (KSWX.NE.2 .AND. KSWX.NE.3 .AND. KSWY.NE.2 .AND. KSWY.NE.3)
|
|
600
|
+
1 USOL(1,1) = GRHS(1,1)
|
|
601
|
+
IF (KSWX.NE.2 .AND. KSWX.NE.5 .AND. KSWY.NE.2 .AND. KSWY.NE.3)
|
|
602
|
+
1 USOL(K,1) = GRHS(K,1)
|
|
603
|
+
IF (KSWX.NE.2 .AND. KSWX.NE.3 .AND. KSWY.NE.2 .AND. KSWY.NE.5)
|
|
604
|
+
1 USOL(1,L) = GRHS(1,L)
|
|
605
|
+
IF (KSWX.NE.2 .AND. KSWX.NE.5 .AND. KSWY.NE.2 .AND. KSWY.NE.5)
|
|
606
|
+
1 USOL(K,L) = GRHS(K,L)
|
|
607
|
+
I1 = 1
|
|
608
|
+
C
|
|
609
|
+
C SET SWITCHES FOR PERIODIC OR NON-PERIODIC BOUNDARIES
|
|
610
|
+
C
|
|
611
|
+
MP = 1
|
|
612
|
+
NP = 1
|
|
613
|
+
IF (KSWX .EQ. 1) MP = 0
|
|
614
|
+
IF (KSWY .EQ. 1) NP = 0
|
|
615
|
+
C
|
|
616
|
+
C SET DLX,DLY AND SIZE OF BLOCK TRI-DIAGONAL SYSTEM GENERATED
|
|
617
|
+
C IN NINT,MINT
|
|
618
|
+
C
|
|
619
|
+
DLX = (BIT-AIT)/FLOAT(M)
|
|
620
|
+
MIT = K-1
|
|
621
|
+
IF (KSWX .EQ. 2) MIT = K-2
|
|
622
|
+
IF (KSWX .EQ. 4) MIT = K
|
|
623
|
+
DLY = (DIT-CIT)/FLOAT(N)
|
|
624
|
+
NIT = L-1
|
|
625
|
+
IF (KSWY .EQ. 2) NIT = L-2
|
|
626
|
+
IF (KSWY .EQ. 4) NIT = L
|
|
627
|
+
TDLX3 = 2.0*DLX**3
|
|
628
|
+
DLX4 = DLX**4
|
|
629
|
+
TDLY3 = 2.0*DLY**3
|
|
630
|
+
DLY4 = DLY**4
|
|
631
|
+
C
|
|
632
|
+
C SET SUBSCRIPT LIMITS FOR PORTION OF ARRAY TO INPUT TO BLKTRI
|
|
633
|
+
C
|
|
634
|
+
IS = 1
|
|
635
|
+
JS = 1
|
|
636
|
+
IF (KSWX.EQ.2 .OR. KSWX.EQ.3) IS = 2
|
|
637
|
+
IF (KSWY.EQ.2 .OR. KSWY.EQ.3) JS = 2
|
|
638
|
+
NS = NIT+JS-1
|
|
639
|
+
MS = MIT+IS-1
|
|
640
|
+
C
|
|
641
|
+
C SET X - DIRECTION
|
|
642
|
+
C
|
|
643
|
+
DO 110 I=1,MIT
|
|
644
|
+
XI = AIT+FLOAT(IS+I-2)*DLX
|
|
645
|
+
CALL COFX (XI,AI,BI,CI)
|
|
646
|
+
AXI = (AI/DLX-0.5*BI)/DLX
|
|
647
|
+
BXI = -2.*AI/DLX**2+CI
|
|
648
|
+
CXI = (AI/DLX+0.5*BI)/DLX
|
|
649
|
+
AM(I) = AXI
|
|
650
|
+
BM(I) = BXI
|
|
651
|
+
CM(I) = CXI
|
|
652
|
+
110 CONTINUE
|
|
653
|
+
C
|
|
654
|
+
C SET Y DIRECTION
|
|
655
|
+
C
|
|
656
|
+
DO 120 J=1,NIT
|
|
657
|
+
YJ = CIT+FLOAT(JS+J-2)*DLY
|
|
658
|
+
CALL COFY (YJ,DJ,EJ,FJ)
|
|
659
|
+
DYJ = (DJ/DLY-0.5*EJ)/DLY
|
|
660
|
+
EYJ = (-2.*DJ/DLY**2+FJ)
|
|
661
|
+
FYJ = (DJ/DLY+0.5*EJ)/DLY
|
|
662
|
+
AN(J) = DYJ
|
|
663
|
+
BN(J) = EYJ
|
|
664
|
+
CN(J) = FYJ
|
|
665
|
+
120 CONTINUE
|
|
666
|
+
C
|
|
667
|
+
C ADJUST EDGES IN X DIRECTION UNLESS PERIODIC
|
|
668
|
+
C
|
|
669
|
+
AX1 = AM(1)
|
|
670
|
+
CXM = CM(MIT)
|
|
671
|
+
GO TO (170,130,150,160,140),KSWX
|
|
672
|
+
C
|
|
673
|
+
C DIRICHLET-DIRICHLET IN X DIRECTION
|
|
674
|
+
C
|
|
675
|
+
130 AM(1) = 0.0
|
|
676
|
+
CM(MIT) = 0.0
|
|
677
|
+
GO TO 170
|
|
678
|
+
C
|
|
679
|
+
C MIXED-DIRICHLET IN X DIRECTION
|
|
680
|
+
C
|
|
681
|
+
140 AM(1) = 0.0
|
|
682
|
+
BM(1) = BM(1)+2.*ALPHA*DLX*AX1
|
|
683
|
+
CM(1) = CM(1)+AX1
|
|
684
|
+
CM(MIT) = 0.0
|
|
685
|
+
GO TO 170
|
|
686
|
+
C
|
|
687
|
+
C DIRICHLET-MIXED IN X DIRECTION
|
|
688
|
+
C
|
|
689
|
+
150 AM(1) = 0.0
|
|
690
|
+
AM(MIT) = AM(MIT)+CXM
|
|
691
|
+
BM(MIT) = BM(MIT)-2.*BETA*DLX*CXM
|
|
692
|
+
|
|
693
|
+
CM(MIT) = 0.0
|
|
694
|
+
GO TO 170
|
|
695
|
+
C
|
|
696
|
+
C MIXED - MIXED IN X DIRECTION
|
|
697
|
+
C
|
|
698
|
+
160 CONTINUE
|
|
699
|
+
AM(1) = 0.0
|
|
700
|
+
BM(1) = BM(1)+2.*DLX*ALPHA*AX1
|
|
701
|
+
CM(1) = CM(1)+AX1
|
|
702
|
+
AM(MIT) = AM(MIT)+CXM
|
|
703
|
+
BM(MIT) = BM(MIT)-2.*DLX*BETA*CXM
|
|
704
|
+
CM(MIT) = 0.0
|
|
705
|
+
170 CONTINUE
|
|
706
|
+
C
|
|
707
|
+
C ADJUST IN Y DIRECTION UNLESS PERIODIC
|
|
708
|
+
C
|
|
709
|
+
DY1 = AN(1)
|
|
710
|
+
FYN = CN(NIT)
|
|
711
|
+
GO TO (220,180,200,210,190),KSWY
|
|
712
|
+
C
|
|
713
|
+
C DIRICHLET-DIRICHLET IN Y DIRECTION
|
|
714
|
+
C
|
|
715
|
+
180 CONTINUE
|
|
716
|
+
AN(1) = 0.0
|
|
717
|
+
CN(NIT) = 0.0
|
|
718
|
+
GO TO 220
|
|
719
|
+
C
|
|
720
|
+
C MIXED-DIRICHLET IN Y DIRECTION
|
|
721
|
+
C
|
|
722
|
+
190 CONTINUE
|
|
723
|
+
AN(1) = 0.0
|
|
724
|
+
BN(1) = BN(1)+2.*DLY*GAMA*DY1
|
|
725
|
+
CN(1) = CN(1)+DY1
|
|
726
|
+
CN(NIT) = 0.0
|
|
727
|
+
GO TO 220
|
|
728
|
+
C
|
|
729
|
+
C DIRICHLET-MIXED IN Y DIRECTION
|
|
730
|
+
C
|
|
731
|
+
200 AN(1) = 0.0
|
|
732
|
+
AN(NIT) = AN(NIT)+FYN
|
|
733
|
+
BN(NIT) = BN(NIT)-2.*DLY*XNU*FYN
|
|
734
|
+
CN(NIT) = 0.0
|
|
735
|
+
GO TO 220
|
|
736
|
+
C
|
|
737
|
+
C MIXED - MIXED DIRECTION IN Y DIRECTION
|
|
738
|
+
C
|
|
739
|
+
210 CONTINUE
|
|
740
|
+
AN(1) = 0.0
|
|
741
|
+
BN(1) = BN(1)+2.*DLY*GAMA*DY1
|
|
742
|
+
CN(1) = CN(1)+DY1
|
|
743
|
+
AN(NIT) = AN(NIT)+FYN
|
|
744
|
+
BN(NIT) = BN(NIT)-2.0*DLY*XNU*FYN
|
|
745
|
+
CN(NIT) = 0.0
|
|
746
|
+
220 IF (KSWX .EQ. 1) GO TO 270
|
|
747
|
+
C
|
|
748
|
+
C ADJUST USOL ALONG X EDGE
|
|
749
|
+
C
|
|
750
|
+
DO 260 J=JS,NS
|
|
751
|
+
IF (KSWX.NE.2 .AND. KSWX.NE.3) GO TO 230
|
|
752
|
+
USOL(IS,J) = USOL(IS,J)-AX1*USOL(1,J)
|
|
753
|
+
GO TO 240
|
|
754
|
+
230 USOL(IS,J) = USOL(IS,J)+2.0*DLX*AX1*BDA(J)
|
|
755
|
+
240 IF (KSWX.NE.2 .AND. KSWX.NE.5) GO TO 250
|
|
756
|
+
USOL(MS,J) = USOL(MS,J)-CXM*USOL(K,J)
|
|
757
|
+
GO TO 260
|
|
758
|
+
250 USOL(MS,J) = USOL(MS,J)-2.0*DLX*CXM*BDB(J)
|
|
759
|
+
260 CONTINUE
|
|
760
|
+
270 IF (KSWY .EQ. 1) GO TO 320
|
|
761
|
+
C
|
|
762
|
+
C ADJUST USOL ALONG Y EDGE
|
|
763
|
+
C
|
|
764
|
+
DO 310 I=IS,MS
|
|
765
|
+
IF (KSWY.NE.2 .AND. KSWY.NE.3) GO TO 280
|
|
766
|
+
USOL(I,JS) = USOL(I,JS)-DY1*USOL(I,1)
|
|
767
|
+
GO TO 290
|
|
768
|
+
280 USOL(I,JS) = USOL(I,JS)+2.0*DLY*DY1*BDC(I)
|
|
769
|
+
290 IF (KSWY.NE.2 .AND. KSWY.NE.5) GO TO 300
|
|
770
|
+
USOL(I,NS) = USOL(I,NS)-FYN*USOL(I,L)
|
|
771
|
+
GO TO 310
|
|
772
|
+
300 USOL(I,NS) = USOL(I,NS)-2.0*DLY*FYN*BDD(I)
|
|
773
|
+
310 CONTINUE
|
|
774
|
+
320 CONTINUE
|
|
775
|
+
C
|
|
776
|
+
C SAVE ADJUSTED EDGES IN GRHS IF IORDER=4
|
|
777
|
+
C
|
|
778
|
+
IF (IORDER .NE. 4) GO TO 350
|
|
779
|
+
DO 330 J=JS,NS
|
|
780
|
+
GRHS(IS,J) = USOL(IS,J)
|
|
781
|
+
GRHS(MS,J) = USOL(MS,J)
|
|
782
|
+
330 CONTINUE
|
|
783
|
+
DO 340 I=IS,MS
|
|
784
|
+
GRHS(I,JS) = USOL(I,JS)
|
|
785
|
+
GRHS(I,NS) = USOL(I,NS)
|
|
786
|
+
340 CONTINUE
|
|
787
|
+
350 CONTINUE
|
|
788
|
+
IORD = IORDER
|
|
789
|
+
PERTRB = 0.0
|
|
790
|
+
C
|
|
791
|
+
C CHECK IF OPERATOR IS SINGULAR
|
|
792
|
+
C
|
|
793
|
+
CALL CHKSNG (MBDCND,NBDCND,ALPHA,BETA,GAMA,XNU,COFX,COFY,SINGLR)
|
|
794
|
+
C
|
|
795
|
+
C COMPUTE NON-ZERO EIGENVECTOR IN NULL SPACE OF TRANSPOSE
|
|
796
|
+
C IF SINGULAR
|
|
797
|
+
C
|
|
798
|
+
IF (SINGLR) CALL SEPTRI (MIT,AM,BM,CM,DM,UM,ZM)
|
|
799
|
+
IF (SINGLR) CALL SEPTRI (NIT,AN,BN,CN,DN,UN,ZN)
|
|
800
|
+
C
|
|
801
|
+
C MAKE INITIALIZATION CALL TO BLKTRI
|
|
802
|
+
C
|
|
803
|
+
IF (INTL .EQ. 0)
|
|
804
|
+
1 CALL BLKTRI (INTL,NP,NIT,AN,BN,CN,MP,MIT,AM,BM,CM,IDMN,
|
|
805
|
+
2 USOL(IS,JS),IERROR,W)
|
|
806
|
+
IF (IERROR .NE. 0) RETURN
|
|
807
|
+
C
|
|
808
|
+
C ADJUST RIGHT HAND SIDE IF NECESSARY
|
|
809
|
+
C
|
|
810
|
+
360 CONTINUE
|
|
811
|
+
IF (SINGLR) CALL SEPORT (USOL,IDMN,ZN,ZM,PERTRB)
|
|
812
|
+
C
|
|
813
|
+
C COMPUTE SOLUTION
|
|
814
|
+
C
|
|
815
|
+
CALL BLKTRI (I1,NP,NIT,AN,BN,CN,MP,MIT,AM,BM,CM,IDMN,USOL(IS,JS),
|
|
816
|
+
1 IERROR,W)
|
|
817
|
+
IF (IERROR .NE. 0) RETURN
|
|
818
|
+
C
|
|
819
|
+
C SET PERIODIC BOUNDARIES IF NECESSARY
|
|
820
|
+
C
|
|
821
|
+
IF (KSWX .NE. 1) GO TO 380
|
|
822
|
+
DO 370 J=1,L
|
|
823
|
+
USOL(K,J) = USOL(1,J)
|
|
824
|
+
370 CONTINUE
|
|
825
|
+
380 IF (KSWY .NE. 1) GO TO 400
|
|
826
|
+
DO 390 I=1,K
|
|
827
|
+
USOL(I,L) = USOL(I,1)
|
|
828
|
+
390 CONTINUE
|
|
829
|
+
400 CONTINUE
|
|
830
|
+
C
|
|
831
|
+
C MINIMIZE SOLUTION WITH RESPECT TO WEIGHTED LEAST SQUARES
|
|
832
|
+
C NORM IF OPERATOR IS SINGULAR
|
|
833
|
+
C
|
|
834
|
+
IF (SINGLR) CALL SEPMIN (USOL,IDMN,ZN,ZM,PRTRB)
|
|
835
|
+
C
|
|
836
|
+
C RETURN IF DEFERRED CORRECTIONS AND A FOURTH ORDER SOLUTION ARE
|
|
837
|
+
C NOT FLAGGED
|
|
838
|
+
C
|
|
839
|
+
IF (IORD .EQ. 2) RETURN
|
|
840
|
+
IORD = 2
|
|
841
|
+
C
|
|
842
|
+
C COMPUTE NEW RIGHT HAND SIDE FOR FOURTH ORDER SOLUTION
|
|
843
|
+
C
|
|
844
|
+
CALL DEFER (COFX,COFY,IDMN,USOL,GRHS)
|
|
845
|
+
GO TO 360
|
|
846
|
+
END
|
|
847
|
+
SUBROUTINE CHKPRM (INTL,IORDER,A,B,M,MBDCND,C,D,N,NBDCND,COFX,
|
|
848
|
+
1 COFY,IDMN,IERROR)
|
|
849
|
+
C
|
|
850
|
+
C THIS PROGRAM CHECKS THE INPUT PARAMETERS FOR ERRORS
|
|
851
|
+
C
|
|
852
|
+
EXTERNAL COFX ,COFY
|
|
853
|
+
C
|
|
854
|
+
C CHECK DEFINITION OF SOLUTION REGION
|
|
855
|
+
C
|
|
856
|
+
IERROR = 1
|
|
857
|
+
IF (A.GE.B .OR. C.GE.D) RETURN
|
|
858
|
+
C
|
|
859
|
+
C CHECK BOUNDARY SWITCHES
|
|
860
|
+
C
|
|
861
|
+
IERROR = 2
|
|
862
|
+
IF (MBDCND.LT.0 .OR. MBDCND.GT.4) RETURN
|
|
863
|
+
IERROR = 3
|
|
864
|
+
IF (NBDCND.LT.0 .OR. NBDCND.GT.4) RETURN
|
|
865
|
+
C
|
|
866
|
+
C CHECK FIRST DIMENSION IN CALLING ROUTINE
|
|
867
|
+
C
|
|
868
|
+
IERROR = 5
|
|
869
|
+
IF (IDMN .LT. 7) RETURN
|
|
870
|
+
C
|
|
871
|
+
C CHECK M
|
|
872
|
+
C
|
|
873
|
+
IERROR = 6
|
|
874
|
+
IF (M.GT.(IDMN-1) .OR. M.LT.6) RETURN
|
|
875
|
+
C
|
|
876
|
+
C CHECK N
|
|
877
|
+
C
|
|
878
|
+
IERROR = 7
|
|
879
|
+
IF (N .LT. 5) RETURN
|
|
880
|
+
C
|
|
881
|
+
C CHECK IORDER
|
|
882
|
+
C
|
|
883
|
+
IERROR = 8
|
|
884
|
+
IF (IORDER.NE.2 .AND. IORDER.NE.4) RETURN
|
|
885
|
+
C
|
|
886
|
+
C CHECK INTL
|
|
887
|
+
C
|
|
888
|
+
IERROR = 9
|
|
889
|
+
IF (INTL.NE.0 .AND. INTL.NE.1) RETURN
|
|
890
|
+
C
|
|
891
|
+
C CHECK THAT EQUATION IS ELLIPTIC
|
|
892
|
+
C
|
|
893
|
+
DLX = (B-A)/FLOAT(M)
|
|
894
|
+
DLY = (D-C)/FLOAT(N)
|
|
895
|
+
DO 30 I=2,M
|
|
896
|
+
XI = A+FLOAT(I-1)*DLX
|
|
897
|
+
CALL COFX (XI,AI,BI,CI)
|
|
898
|
+
DO 20 J=2,N
|
|
899
|
+
YJ = C+FLOAT(J-1)*DLY
|
|
900
|
+
CALL COFY (YJ,DJ,EJ,FJ)
|
|
901
|
+
IF (AI*DJ .GT. 0.0) GO TO 10
|
|
902
|
+
IERROR = 10
|
|
903
|
+
RETURN
|
|
904
|
+
10 CONTINUE
|
|
905
|
+
20 CONTINUE
|
|
906
|
+
30 CONTINUE
|
|
907
|
+
C
|
|
908
|
+
C NO ERROR FOUND
|
|
909
|
+
C
|
|
910
|
+
IERROR = 0
|
|
911
|
+
RETURN
|
|
912
|
+
END
|
|
913
|
+
SUBROUTINE CHKSNG (MBDCND,NBDCND,ALPHA,BETA,GAMA,XNU,COFX,COFY,
|
|
914
|
+
1 SINGLR)
|
|
915
|
+
C
|
|
916
|
+
C THIS SUBROUTINE CHECKS IF THE PDE SEPELI
|
|
917
|
+
C MUST SOLVE IS A SINGULAR OPERATOR
|
|
918
|
+
C
|
|
919
|
+
COMMON /SPLP/ KSWX ,KSWY ,K ,L ,
|
|
920
|
+
1 AIT ,BIT ,CIT ,DIT ,
|
|
921
|
+
2 MIT ,NIT ,IS ,MS ,
|
|
922
|
+
3 JS ,NS ,DLX ,DLY ,
|
|
923
|
+
4 TDLX3 ,TDLY3 ,DLX4 ,DLY4
|
|
924
|
+
LOGICAL SINGLR
|
|
925
|
+
SINGLR = .FALSE.
|
|
926
|
+
C
|
|
927
|
+
C CHECK IF THE BOUNDARY CONDITIONS ARE
|
|
928
|
+
C ENTIRELY PERIODIC AND/OR MIXED
|
|
929
|
+
C
|
|
930
|
+
IF ((MBDCND.NE.0 .AND. MBDCND.NE.3) .OR.
|
|
931
|
+
1 (NBDCND.NE.0 .AND. NBDCND.NE.3)) RETURN
|
|
932
|
+
C
|
|
933
|
+
C CHECK THAT MIXED CONDITIONS ARE PURE NEUMAN
|
|
934
|
+
C
|
|
935
|
+
IF (MBDCND .NE. 3) GO TO 10
|
|
936
|
+
IF (ALPHA.NE.0.0 .OR. BETA.NE.0.0) RETURN
|
|
937
|
+
10 IF (NBDCND .NE. 3) GO TO 20
|
|
938
|
+
IF (GAMA.NE.0.0 .OR. XNU.NE.0.0) RETURN
|
|
939
|
+
20 CONTINUE
|
|
940
|
+
C
|
|
941
|
+
C CHECK THAT NON-DERIVATIVE COEFFICIENT FUNCTIONS
|
|
942
|
+
C ARE ZERO
|
|
943
|
+
C
|
|
944
|
+
DO 30 I=IS,MS
|
|
945
|
+
XI = AIT+FLOAT(I-1)*DLX
|
|
946
|
+
CALL COFX (XI,AI,BI,CI)
|
|
947
|
+
IF (CI .NE. 0.0) RETURN
|
|
948
|
+
30 CONTINUE
|
|
949
|
+
DO 40 J=JS,NS
|
|
950
|
+
YJ = CIT+FLOAT(J-1)*DLY
|
|
951
|
+
CALL COFY (YJ,DJ,EJ,FJ)
|
|
952
|
+
IF (FJ .NE. 0.0) RETURN
|
|
953
|
+
40 CONTINUE
|
|
954
|
+
C
|
|
955
|
+
C THE OPERATOR MUST BE SINGULAR IF THIS POINT IS REACHED
|
|
956
|
+
C
|
|
957
|
+
SINGLR = .TRUE.
|
|
958
|
+
RETURN
|
|
959
|
+
END
|
|
960
|
+
SUBROUTINE DEFER (COFX,COFY,IDMN,USOL,GRHS)
|
|
961
|
+
C
|
|
962
|
+
C THIS SUBROUTINE FIRST APPROXIMATES THE TRUNCATION ERROR GIVEN BY
|
|
963
|
+
C TRUN1(X,Y)=DLX**2*TX+DLY**2*TY WHERE
|
|
964
|
+
C TX=AFUN(X)*UXXXX/12.0+BFUN(X)*UXXX/6.0 ON THE INTERIOR AND
|
|
965
|
+
C AT THE BOUNDARIES IF PERIODIC(HERE UXXX,UXXXX ARE THE THIRD
|
|
966
|
+
C AND FOURTH PARTIAL DERIVATIVES OF U WITH RESPECT TO X).
|
|
967
|
+
C TX IS OF THE FORM AFUN(X)/3.0*(UXXXX/4.0+UXXX/DLX)
|
|
968
|
+
C AT X=A OR X=B IF THE BOUNDARY CONDITION THERE IS MIXED.
|
|
969
|
+
C TX=0.0 ALONG SPECIFIED BOUNDARIES. TY HAS SYMMETRIC FORM
|
|
970
|
+
C IN Y WITH X,AFUN(X),BFUN(X) REPLACED BY Y,DFUN(Y),EFUN(Y).
|
|
971
|
+
C THE SECOND ORDER SOLUTION IN USOL IS USED TO APPROXIMATE
|
|
972
|
+
C (VIA SECOND ORDER FINITE DIFFERENCING) THE TRUNCATION ERROR
|
|
973
|
+
C AND THE RESULT IS ADDED TO THE RIGHT HAND SIDE IN GRHS
|
|
974
|
+
C AND THEN TRANSFERRED TO USOL TO BE USED AS A NEW RIGHT
|
|
975
|
+
C HAND SIDE WHEN CALLING BLKTRI FOR A FOURTH ORDER SOLUTION.
|
|
976
|
+
C
|
|
977
|
+
COMMON /SPLP/ KSWX ,KSWY ,K ,L ,
|
|
978
|
+
1 AIT ,BIT ,CIT ,DIT ,
|
|
979
|
+
2 MIT ,NIT ,IS ,MS ,
|
|
980
|
+
3 JS ,NS ,DLX ,DLY ,
|
|
981
|
+
4 TDLX3 ,TDLY3 ,DLX4 ,DLY4
|
|
982
|
+
DIMENSION GRHS(IDMN,1) ,USOL(IDMN,1)
|
|
983
|
+
EXTERNAL COFX ,COFY
|
|
984
|
+
C
|
|
985
|
+
C COMPUTE TRUNCATION ERROR APPROXIMATION OVER THE ENTIRE MESH
|
|
986
|
+
C
|
|
987
|
+
DO 40 J=JS,NS
|
|
988
|
+
YJ = CIT+FLOAT(J-1)*DLY
|
|
989
|
+
CALL COFY (YJ,DJ,EJ,FJ)
|
|
990
|
+
DO 30 I=IS,MS
|
|
991
|
+
XI = AIT+FLOAT(I-1)*DLX
|
|
992
|
+
CALL COFX (XI,AI,BI,CI)
|
|
993
|
+
C
|
|
994
|
+
C COMPUTE PARTIAL DERIVATIVE APPROXIMATIONS AT (XI,YJ)
|
|
995
|
+
C
|
|
996
|
+
CALL SEPDX (USOL,IDMN,I,J,UXXX,UXXXX)
|
|
997
|
+
CALL SEPDY (USOL,IDMN,I,J,UYYY,UYYYY)
|
|
998
|
+
TX = AI*UXXXX/12.0+BI*UXXX/6.0
|
|
999
|
+
TY = DJ*UYYYY/12.0+EJ*UYYY/6.0
|
|
1000
|
+
C
|
|
1001
|
+
C RESET FORM OF TRUNCATION IF AT BOUNDARY WHICH IS NON-PERIODIC
|
|
1002
|
+
C
|
|
1003
|
+
IF (KSWX.EQ.1 .OR. (I.GT.1 .AND. I.LT.K)) GO TO 10
|
|
1004
|
+
TX = AI/3.0*(UXXXX/4.0+UXXX/DLX)
|
|
1005
|
+
10 IF (KSWY.EQ.1 .OR. (J.GT.1 .AND. J.LT.L)) GO TO 20
|
|
1006
|
+
TY = DJ/3.0*(UYYYY/4.0+UYYY/DLY)
|
|
1007
|
+
20 GRHS(I,J) = GRHS(I,J)+DLX**2*TX+DLY**2*TY
|
|
1008
|
+
30 CONTINUE
|
|
1009
|
+
40 CONTINUE
|
|
1010
|
+
C
|
|
1011
|
+
C RESET THE RIGHT HAND SIDE IN USOL
|
|
1012
|
+
C
|
|
1013
|
+
DO 60 I=IS,MS
|
|
1014
|
+
DO 50 J=JS,NS
|
|
1015
|
+
USOL(I,J) = GRHS(I,J)
|
|
1016
|
+
50 CONTINUE
|
|
1017
|
+
60 CONTINUE
|
|
1018
|
+
RETURN
|
|
1019
|
+
C
|
|
1020
|
+
C REVISION HISTORY---
|
|
1021
|
+
C
|
|
1022
|
+
C SEPTEMBER 1973 VERSION 1
|
|
1023
|
+
C APRIL 1976 VERSION 2
|
|
1024
|
+
C JANUARY 1978 VERSION 3
|
|
1025
|
+
C DECEMBER 1979 VERSION 3.1
|
|
1026
|
+
C FEBRUARY 1985 DOCUMENTATION UPGRADE
|
|
1027
|
+
C NOVEMBER 1988 VERSION 3.2, FORTRAN 77 CHANGES
|
|
1028
|
+
C-----------------------------------------------------------------------
|
|
1029
|
+
END
|