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.
Files changed (81) hide show
  1. PyFishPack/__init__.py +86 -0
  2. PyFishPack/__pycache__/__init__.cpython-313.pyc +0 -0
  3. PyFishPack/__pycache__/apps.cpython-313.pyc +0 -0
  4. PyFishPack/_dummy.c +23 -0
  5. PyFishPack/_dummy.cp313-win_amd64.pyd +0 -0
  6. PyFishPack/apps.py +3640 -0
  7. PyFishPack/fishpack.cp313-win_amd64.dll.a +0 -0
  8. PyFishPack/fishpack.cp313-win_amd64.pyd +0 -0
  9. PyFishPack/meson.build +213 -0
  10. PyFishPack/src/archive/f77/Makefile +19 -0
  11. PyFishPack/src/archive/f77/blktri.f +1404 -0
  12. PyFishPack/src/archive/f77/cblktri.f +1414 -0
  13. PyFishPack/src/archive/f77/cmgnbn.f +1592 -0
  14. PyFishPack/src/archive/f77/comf.f +186 -0
  15. PyFishPack/src/archive/f77/fftpack.f +2968 -0
  16. PyFishPack/src/archive/f77/genbun.f +1335 -0
  17. PyFishPack/src/archive/f77/gnbnaux.f +314 -0
  18. PyFishPack/src/archive/f77/hstcrt.f +443 -0
  19. PyFishPack/src/archive/f77/hstcsp.f +683 -0
  20. PyFishPack/src/archive/f77/hstcyl.f +485 -0
  21. PyFishPack/src/archive/f77/hstplr.f +538 -0
  22. PyFishPack/src/archive/f77/hstssp.f +634 -0
  23. PyFishPack/src/archive/f77/hw3crt.f +687 -0
  24. PyFishPack/src/archive/f77/hwscrt.f +512 -0
  25. PyFishPack/src/archive/f77/hwscsp.f +728 -0
  26. PyFishPack/src/archive/f77/hwscyl.f +538 -0
  27. PyFishPack/src/archive/f77/hwsplr.f +602 -0
  28. PyFishPack/src/archive/f77/hwsssp.f +780 -0
  29. PyFishPack/src/archive/f77/pois3d.f +550 -0
  30. PyFishPack/src/archive/f77/poistg.f +875 -0
  31. PyFishPack/src/archive/f77/sepaux.f +361 -0
  32. PyFishPack/src/archive/f77/sepeli.f +1029 -0
  33. PyFishPack/src/archive/f77/sepx4.f +958 -0
  34. PyFishPack/src/centered_axisymmetric_spherical_solver.f90 +1002 -0
  35. PyFishPack/src/centered_cartesian_helmholtz_solver_3d.f90 +819 -0
  36. PyFishPack/src/centered_cartesian_solver.f90 +583 -0
  37. PyFishPack/src/centered_cylindrical_solver.f90 +634 -0
  38. PyFishPack/src/centered_helmholtz_solvers.f90 +156 -0
  39. PyFishPack/src/centered_polar_solver.f90 +746 -0
  40. PyFishPack/src/centered_real_linear_systems_solver.f90 +280 -0
  41. PyFishPack/src/centered_spherical_solver.f90 +928 -0
  42. PyFishPack/src/complex_block_tridiagonal_linear_systems_solver.f90 +1947 -0
  43. PyFishPack/src/complex_linear_systems_solver.f90 +1787 -0
  44. PyFishPack/src/fftpack_c_api.f90 +86 -0
  45. PyFishPack/src/fishpack.f90 +191 -0
  46. PyFishPack/src/fishpack.pyf +504 -0
  47. PyFishPack/src/fishpack_c_api.f90 +365 -0
  48. PyFishPack/src/fishpack_original.pyf +2119 -0
  49. PyFishPack/src/fishpack_precision.f90 +53 -0
  50. PyFishPack/src/general_linear_systems_solver_3d.f90 +296 -0
  51. PyFishPack/src/iterative_solvers.f90 +969 -0
  52. PyFishPack/src/main.f90 +10 -0
  53. PyFishPack/src/pyfishpack_module.c +1302 -0
  54. PyFishPack/src/real_block_tridiagonal_linear_systems_solver.f90 +319 -0
  55. PyFishPack/src/sepeli.f90 +1454 -0
  56. PyFishPack/src/sepx4.f90 +1338 -0
  57. PyFishPack/src/staggered_axisymmetric_spherical_solver.f90 +908 -0
  58. PyFishPack/src/staggered_cartesian_solver.f90 +553 -0
  59. PyFishPack/src/staggered_cylindrical_solver.f90 +630 -0
  60. PyFishPack/src/staggered_helmholtz_solvers.f90 +172 -0
  61. PyFishPack/src/staggered_polar_solver.f90 +651 -0
  62. PyFishPack/src/staggered_real_linear_systems_solver.f90 +258 -0
  63. PyFishPack/src/staggered_spherical_solver.f90 +758 -0
  64. PyFishPack/src/three_dimensional_solvers.f90 +602 -0
  65. PyFishPack/src/type_CenteredCyclicReductionUtility.f90 +1714 -0
  66. PyFishPack/src/type_CyclicReductionUtility.f90 +472 -0
  67. PyFishPack/src/type_FishpackWorkspace.f90 +290 -0
  68. PyFishPack/src/type_GeneralizedCyclicReductionUtility.f90 +1980 -0
  69. PyFishPack/src/type_PeriodicFastFourierTransform.f90 +3789 -0
  70. PyFishPack/src/type_SepAux.f90 +586 -0
  71. PyFishPack/src/type_StaggeredCyclicReductionUtility.f90 +893 -0
  72. pyfishpack-0.1.0.dist-info/DELVEWHEEL +2 -0
  73. pyfishpack-0.1.0.dist-info/METADATA +81 -0
  74. pyfishpack-0.1.0.dist-info/RECORD +81 -0
  75. pyfishpack-0.1.0.dist-info/WHEEL +5 -0
  76. pyfishpack-0.1.0.dist-info/licenses/LICENSE +21 -0
  77. pyfishpack-0.1.0.dist-info/top_level.txt +1 -0
  78. pyfishpack.libs/libgcc_s_seh-1-25d59ccffa1a9009644065b069829e07.dll +0 -0
  79. pyfishpack.libs/libgfortran-5-08f2195cfa0d823e13371c5c3186a82a.dll +0 -0
  80. pyfishpack.libs/libquadmath-0-c5abb9113f1ee64b87a889958e4b7418.dll +0 -0
  81. pyfishpack.libs/libwinpthread-1-83908d14abfafb8b3bfa38cf51ecee56.dll +0 -0
@@ -0,0 +1,875 @@
1
+ C
2
+ C file poistg.f
3
+ C
4
+ SUBROUTINE POISTG (NPEROD,N,MPEROD,M,A,B,C,IDIMY,Y,IERROR,W)
5
+ C
6
+ C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
7
+ C * *
8
+ C * copyright (c) 1999 by UCAR *
9
+ C * *
10
+ C * UNIVERSITY CORPORATION for ATMOSPHERIC RESEARCH *
11
+ C * *
12
+ C * all rights reserved *
13
+ C * *
14
+ C * FISHPACK version 4.1 *
15
+ C * *
16
+ C * A PACKAGE OF FORTRAN SUBPROGRAMS FOR THE SOLUTION OF *
17
+ C * *
18
+ C * SEPARABLE ELLIPTIC PARTIAL DIFFERENTIAL EQUATIONS *
19
+ C * *
20
+ C * BY *
21
+ C * *
22
+ C * JOHN ADAMS, PAUL SWARZTRAUBER AND ROLAND SWEET *
23
+ C * *
24
+ C * OF *
25
+ C * *
26
+ C * THE NATIONAL CENTER FOR ATMOSPHERIC RESEARCH *
27
+ C * *
28
+ C * BOULDER, COLORADO (80307) U.S.A. *
29
+ C * *
30
+ C * WHICH IS SPONSORED BY *
31
+ C * *
32
+ C * THE NATIONAL SCIENCE FOUNDATION *
33
+ C * *
34
+ C * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
35
+ C
36
+ C
37
+ C
38
+ C DIMENSION OF A(M), B(M), C(M), Y(IDIMY,N),
39
+ C ARGUMENTS W(SEE ARGUMENT LIST)
40
+ C
41
+ C LATEST REVISION NOVEMBER 1988
42
+ C
43
+ C PURPOSE SOLVES THE LINEAR SYSTEM OF EQUATIONS
44
+ C FOR UNKNOWN X VALUES, WHERE I=1,2,...,M
45
+ C AND J=1,2,...,N
46
+ C
47
+ C A(I)*X(I-1,J) + B(I)*X(I,J) + C(I)*X(I+1,J)
48
+ C + X(I,J-1) - 2.*X(I,J) + X(I,J+1)
49
+ C = Y(I,J)
50
+ C
51
+ C THE INDICES I+1 AND I-1 ARE EVALUATED MODULO M,
52
+ C I.E. X(0,J) = X(M,J) AND X(M+1,J) = X(1,J), AND
53
+ C X(I,0) MAY BE EQUAL TO X(I,1) OR -X(I,1), AND
54
+ C X(I,N+1) MAY BE EQUAL TO X(I,N) OR -X(I,N),
55
+ C DEPENDING ON AN INPUT PARAMETER.
56
+ C
57
+ C USAGE CALL POISTG (NPEROD,N,MPEROD,M,A,B,C,IDIMY,Y,
58
+ C IERROR,W)
59
+ C
60
+ C ARGUMENTS
61
+ C
62
+ C ON INPUT
63
+ C
64
+ C NPEROD
65
+ C INDICATES VALUES WHICH X(I,0) AND X(I,N+1)
66
+ C ARE ASSUMED TO HAVE.
67
+ C = 1 IF X(I,0) = -X(I,1) AND X(I,N+1) = -X(I,N
68
+ C = 2 IF X(I,0) = -X(I,1) AND X(I,N+1) = X(I,N
69
+ C = 3 IF X(I,0) = X(I,1) AND X(I,N+1) = X(I,N
70
+ C = 4 IF X(I,0) = X(I,1) AND X(I,N+1) = -X(I,N
71
+ C
72
+ C N
73
+ C THE NUMBER OF UNKNOWNS IN THE J-DIRECTION.
74
+ C N MUST BE GREATER THAN 2.
75
+ C
76
+ C MPEROD
77
+ C = 0 IF A(1) AND C(M) ARE NOT ZERO
78
+ C = 1 IF A(1) = C(M) = 0
79
+ C
80
+ C M
81
+ C THE NUMBER OF UNKNOWNS IN THE I-DIRECTION.
82
+ C M MUST BE GREATER THAN 2.
83
+ C
84
+ C A,B,C
85
+ C ONE-DIMENSIONAL ARRAYS OF LENGTH M THAT
86
+ C SPECIFY THE COEFFICIENTS IN THE LINEAR
87
+ C EQUATIONS GIVEN ABOVE. IF MPEROD = 0 THE
88
+ C ARRAY ELEMENTS MUST NOT DEPEND ON INDEX I,
89
+ C BUT MUST BE CONSTANT. SPECIFICALLY, THE
90
+ C SUBROUTINE CHECKS THE FOLLOWING CONDITION
91
+ C A(I) = C(1)
92
+ C B(I) = B(1)
93
+ C C(I) = C(1)
94
+ C FOR I = 1, 2, ..., M.
95
+ C
96
+ C IDIMY
97
+ C THE ROW (OR FIRST) DIMENSION OF THE TWO-
98
+ C DIMENSIONAL ARRAY Y AS IT APPEARS IN THE
99
+ C PROGRAM CALLING POISTG. THIS PARAMETER IS
100
+ C USED TO SPECIFY THE VARIABLE DIMENSION OF Y.
101
+ C IDIMY MUST BE AT LEAST M.
102
+ C
103
+ C Y
104
+ C A TWO-DIMENSIONAL ARRAY THAT SPECIFIES THE
105
+ C VALUES OF THE RIGHT SIDE OF THE LINEAR SYSTEM
106
+ C OF EQUATIONS GIVEN ABOVE.
107
+ C Y MUST BE DIMENSIONED AT LEAST M X N.
108
+ C
109
+ C W
110
+ C A ONE-DIMENSIONAL WORK ARRAY THAT MUST BE
111
+ C PROVIDED BY THE USER FOR WORK SPACE. W MAY
112
+ C REQUIRE UP TO 9M + 4N + M(INT(LOG2(N)))
113
+ C LOCATIONS. THE ACTUAL NUMBER OF LOCATIONS
114
+ C USED IS COMPUTED BY POISTG AND RETURNED IN
115
+ C LOCATION W(1).
116
+ C
117
+ C ON OUTPUT
118
+ C
119
+ C Y
120
+ C CONTAINS THE SOLUTION X.
121
+ C
122
+ C IERROR
123
+ C AN ERROR FLAG THAT INDICATES INVALID INPUT
124
+ C PARAMETERS. EXCEPT FOR NUMBER ZERO, A
125
+ C SOLUTION IS NOT ATTEMPTED.
126
+ C = 0 NO ERROR
127
+ C = 1 IF M .LE. 2
128
+ C = 2 IF N .LE. 2
129
+ C = 3 IDIMY .LT. M
130
+ C = 4 IF NPEROD .LT. 1 OR NPEROD .GT. 4
131
+ C = 5 IF MPEROD .LT. 0 OR MPEROD .GT. 1
132
+ C = 6 IF MPEROD = 0 AND A(I) .NE. C(1)
133
+ C OR B(I) .NE. B(1) OR C(I) .NE. C(1)
134
+ C FOR SOME I = 1, 2, ..., M.
135
+ C = 7 IF MPEROD .EQ. 1 .AND.
136
+ C (A(1).NE.0 .OR. C(M).NE.0)
137
+ C
138
+ C W
139
+ C W(1) CONTAINS THE REQUIRED LENGTH OF W.
140
+ C
141
+ C
142
+ C I/O NONE
143
+ C
144
+ C PRECISION SINGLE
145
+ C
146
+ C REQUIRED LIBRARY GNBNAUX AND COMF FROM FISHPACK
147
+ C FILES
148
+ C
149
+ C LANGUAGE FORTRAN
150
+ C
151
+ C HISTORY WRITTEN BY ROLAND SWEET AT NCAR IN THE LATE
152
+ C 1970'S. RELEASED ON NCAR'S PUBLIC SOFTWARE
153
+ C LIBRARIES IN JANUARY, 1980.
154
+ C
155
+ C PORTABILITY FORTRAN 77
156
+ C
157
+ C ALGORITHM THIS SUBROUTINE IS AN IMPLEMENTATION OF THE
158
+ C ALGORITHM PRESENTED IN THE REFERENCE BELOW.
159
+ C
160
+ C TIMING FOR LARGE M AND N, THE EXECUTION TIME IS
161
+ C ROUGHLY PROPORTIONAL TO M*N*LOG2(N).
162
+ C
163
+ C ACCURACY TO MEASURE THE ACCURACY OF THE ALGORITHM A
164
+ C UNIFORM RANDOM NUMBER GENERATOR WAS USED TO
165
+ C CREATE A SOLUTION ARRAY X FOR THE SYSTEM GIVEN
166
+ C IN THE 'PURPOSE' SECTION ABOVE, WITH
167
+ C A(I) = C(I) = -0.5*B(I) = 1, I=1,2,...,M
168
+ C AND, WHEN MPEROD = 1
169
+ C A(1) = C(M) = 0
170
+ C B(1) = B(M) =-1.
171
+ C
172
+ C THE SOLUTION X WAS SUBSTITUTED INTO THE GIVEN
173
+ C SYSTEM AND, USING DOUBLE PRECISION, A RIGHT SID
174
+ C Y WAS COMPUTED. USING THIS ARRAY Y SUBROUTINE
175
+ C POISTG WAS CALLED TO PRODUCE AN APPROXIMATE
176
+ C SOLUTION Z. THEN THE RELATIVE ERROR, DEFINED A
177
+ C E = MAX(ABS(Z(I,J)-X(I,J)))/MAX(ABS(X(I,J)))
178
+ C WHERE THE TWO MAXIMA ARE TAKEN OVER I=1,2,...,M
179
+ C AND J=1,2,...,N, WAS COMPUTED. VALUES OF E ARE
180
+ C GIVEN IN THE TABLE BELOW FOR SOME TYPICAL VALUE
181
+ C OF M AND N.
182
+ C
183
+ C M (=N) MPEROD NPEROD E
184
+ C ------ ------ ------ ------
185
+ C
186
+ C 31 0-1 1-4 9.E-13
187
+ C 31 1 1 4.E-13
188
+ C 31 1 3 3.E-13
189
+ C 32 0-1 1-4 3.E-12
190
+ C 32 1 1 3.E-13
191
+ C 32 1 3 1.E-13
192
+ C 33 0-1 1-4 1.E-12
193
+ C 33 1 1 4.E-13
194
+ C 33 1 3 1.E-13
195
+ C 63 0-1 1-4 3.E-12
196
+ C 63 1 1 1.E-12
197
+ C 63 1 3 2.E-13
198
+ C 64 0-1 1-4 4.E-12
199
+ C 64 1 1 1.E-12
200
+ C 64 1 3 6.E-13
201
+ C 65 0-1 1-4 2.E-13
202
+ C 65 1 1 1.E-11
203
+ C 65 1 3 4.E-13
204
+ C
205
+ C REFERENCES SCHUMANN, U. AND R. SWEET,"A DIRECT METHOD
206
+ C FOR THE SOLUTION OF POISSON"S EQUATION WITH
207
+ C NEUMANN BOUNDARY CONDITIONS ON A STAGGERED
208
+ C GRID OF ARBITRARY SIZE," J. COMP. PHYS.
209
+ C 20(1976), PP. 171-182.
210
+ C *********************************************************************
211
+ DIMENSION Y(IDIMY,1)
212
+ DIMENSION W(*) ,B(*) ,A(*) ,C(*)
213
+ C
214
+ IERROR = 0
215
+ IF (M .LE. 2) IERROR = 1
216
+ IF (N .LE. 2) IERROR = 2
217
+ IF (IDIMY .LT. M) IERROR = 3
218
+ IF (NPEROD.LT.1 .OR. NPEROD.GT.4) IERROR = 4
219
+ IF (MPEROD.LT.0 .OR. MPEROD.GT.1) IERROR = 5
220
+ IF (MPEROD .EQ. 1) GO TO 103
221
+ DO 101 I=1,M
222
+ IF (A(I) .NE. C(1)) GO TO 102
223
+ IF (C(I) .NE. C(1)) GO TO 102
224
+ IF (B(I) .NE. B(1)) GO TO 102
225
+ 101 CONTINUE
226
+ GO TO 104
227
+ 102 IERROR = 6
228
+ RETURN
229
+ 103 IF (A(1).NE.0. .OR. C(M).NE.0.) IERROR = 7
230
+ 104 IF (IERROR .NE. 0) RETURN
231
+ IWBA = M+1
232
+ IWBB = IWBA+M
233
+ IWBC = IWBB+M
234
+ IWB2 = IWBC+M
235
+ IWB3 = IWB2+M
236
+ IWW1 = IWB3+M
237
+ IWW2 = IWW1+M
238
+ IWW3 = IWW2+M
239
+ IWD = IWW3+M
240
+ IWTCOS = IWD+M
241
+ IWP = IWTCOS+4*N
242
+ DO 106 I=1,M
243
+ K = IWBA+I-1
244
+ W(K) = -A(I)
245
+ K = IWBC+I-1
246
+ W(K) = -C(I)
247
+ K = IWBB+I-1
248
+ W(K) = 2.-B(I)
249
+ DO 105 J=1,N
250
+ Y(I,J) = -Y(I,J)
251
+ 105 CONTINUE
252
+ 106 CONTINUE
253
+ NP = NPEROD
254
+ MP = MPEROD+1
255
+ GO TO (110,107),MP
256
+ 107 CONTINUE
257
+ GO TO (108,108,108,119),NPEROD
258
+ 108 CONTINUE
259
+ CALL POSTG2 (NP,N,M,W(IWBA),W(IWBB),W(IWBC),IDIMY,Y,W,W(IWB2),
260
+ 1 W(IWB3),W(IWW1),W(IWW2),W(IWW3),W(IWD),W(IWTCOS),
261
+ 2 W(IWP))
262
+ IPSTOR = W(IWW1)
263
+ IREV = 2
264
+ IF (NPEROD .EQ. 4) GO TO 120
265
+ 109 CONTINUE
266
+ GO TO (123,129),MP
267
+ 110 CONTINUE
268
+ C
269
+ C REORDER UNKNOWNS WHEN MP =0
270
+ C
271
+ MH = (M+1)/2
272
+ MHM1 = MH-1
273
+ MODD = 1
274
+ IF (MH*2 .EQ. M) MODD = 2
275
+ DO 115 J=1,N
276
+ DO 111 I=1,MHM1
277
+ MHPI = MH+I
278
+ MHMI = MH-I
279
+ W(I) = Y(MHMI,J)-Y(MHPI,J)
280
+ W(MHPI) = Y(MHMI,J)+Y(MHPI,J)
281
+ 111 CONTINUE
282
+ W(MH) = 2.*Y(MH,J)
283
+ GO TO (113,112),MODD
284
+ 112 W(M) = 2.*Y(M,J)
285
+ 113 CONTINUE
286
+ DO 114 I=1,M
287
+ Y(I,J) = W(I)
288
+ 114 CONTINUE
289
+ 115 CONTINUE
290
+ K = IWBC+MHM1-1
291
+ I = IWBA+MHM1
292
+ W(K) = 0.
293
+ W(I) = 0.
294
+ W(K+1) = 2.*W(K+1)
295
+ GO TO (116,117),MODD
296
+ 116 CONTINUE
297
+ K = IWBB+MHM1-1
298
+ W(K) = W(K)-W(I-1)
299
+ W(IWBC-1) = W(IWBC-1)+W(IWBB-1)
300
+ GO TO 118
301
+ 117 W(IWBB-1) = W(K+1)
302
+ 118 CONTINUE
303
+ GO TO 107
304
+ 119 CONTINUE
305
+ C
306
+ C REVERSE COLUMNS WHEN NPEROD = 4.
307
+ C
308
+ IREV = 1
309
+ NBY2 = N/2
310
+ NP = 2
311
+ 120 DO 122 J=1,NBY2
312
+ MSKIP = N+1-J
313
+ DO 121 I=1,M
314
+ A1 = Y(I,J)
315
+ Y(I,J) = Y(I,MSKIP)
316
+ Y(I,MSKIP) = A1
317
+ 121 CONTINUE
318
+ 122 CONTINUE
319
+ GO TO (108,109),IREV
320
+ 123 CONTINUE
321
+ DO 128 J=1,N
322
+ DO 124 I=1,MHM1
323
+ MHMI = MH-I
324
+ MHPI = MH+I
325
+ W(MHMI) = .5*(Y(MHPI,J)+Y(I,J))
326
+ W(MHPI) = .5*(Y(MHPI,J)-Y(I,J))
327
+ 124 CONTINUE
328
+ W(MH) = .5*Y(MH,J)
329
+ GO TO (126,125),MODD
330
+ 125 W(M) = .5*Y(M,J)
331
+ 126 CONTINUE
332
+ DO 127 I=1,M
333
+ Y(I,J) = W(I)
334
+ 127 CONTINUE
335
+ 128 CONTINUE
336
+ 129 CONTINUE
337
+ C
338
+ C RETURN STORAGE REQUIREMENTS FOR W ARRAY.
339
+ C
340
+ W(1) = IPSTOR+IWP-1
341
+ RETURN
342
+ END
343
+ SUBROUTINE POSTG2 (NPEROD,N,M,A,BB,C,IDIMQ,Q,B,B2,B3,W,W2,W3,D,
344
+ 1 TCOS,P)
345
+ C
346
+ C SUBROUTINE TO SOLVE POISSON'S EQUATION ON A STAGGERED GRID.
347
+ C
348
+ C
349
+ DIMENSION A(*) ,BB(*) ,C(*) ,Q(IDIMQ,*) ,
350
+ 1 B(*) ,B2(*) ,B3(*) ,W(*) ,
351
+ 2 W2(*) ,W3(*) ,D(*) ,TCOS(*) ,
352
+ 3 K(4) ,P(*)
353
+ EQUIVALENCE (K(1),K1) ,(K(2),K2) ,(K(3),K3) ,(K(4),K4)
354
+ NP = NPEROD
355
+ FNUM = 0.5*FLOAT(NP/3)
356
+ FNUM2 = 0.5*FLOAT(NP/2)
357
+ MR = M
358
+ IP = -MR
359
+ IPSTOR = 0
360
+ I2R = 1
361
+ JR = 2
362
+ NR = N
363
+ NLAST = N
364
+ KR = 1
365
+ LR = 0
366
+ IF (NR .LE. 3) GO TO 142
367
+ 101 CONTINUE
368
+ JR = 2*I2R
369
+ NROD = 1
370
+ IF ((NR/2)*2 .EQ. NR) NROD = 0
371
+ JSTART = 1
372
+ JSTOP = NLAST-JR
373
+ IF (NROD .EQ. 0) JSTOP = JSTOP-I2R
374
+ I2RBY2 = I2R/2
375
+ IF (JSTOP .GE. JSTART) GO TO 102
376
+ J = JR
377
+ GO TO 115
378
+ 102 CONTINUE
379
+ C
380
+ C REGULAR REDUCTION.
381
+ C
382
+ IJUMP = 1
383
+ DO 114 J=JSTART,JSTOP,JR
384
+ JP1 = J+I2RBY2
385
+ JP2 = J+I2R
386
+ JP3 = JP2+I2RBY2
387
+ JM1 = J-I2RBY2
388
+ JM2 = J-I2R
389
+ JM3 = JM2-I2RBY2
390
+ IF (J .NE. 1) GO TO 106
391
+ CALL COSGEN (I2R,1,FNUM,0.5,TCOS)
392
+ IF (I2R .NE. 1) GO TO 104
393
+ DO 103 I=1,MR
394
+ B(I) = Q(I,1)
395
+ Q(I,1) = Q(I,2)
396
+ 103 CONTINUE
397
+ GO TO 112
398
+ 104 DO 105 I=1,MR
399
+ B(I) = Q(I,1)+0.5*(Q(I,JP2)-Q(I,JP1)-Q(I,JP3))
400
+ Q(I,1) = Q(I,JP2)+Q(I,1)-Q(I,JP1)
401
+ 105 CONTINUE
402
+ GO TO 112
403
+ 106 CONTINUE
404
+ GO TO (107,108),IJUMP
405
+ 107 CONTINUE
406
+ IJUMP = 2
407
+ CALL COSGEN (I2R,1,0.5,0.0,TCOS)
408
+ 108 CONTINUE
409
+ IF (I2R .NE. 1) GO TO 110
410
+ DO 109 I=1,MR
411
+ B(I) = 2.*Q(I,J)
412
+ Q(I,J) = Q(I,JM2)+Q(I,JP2)
413
+ 109 CONTINUE
414
+ GO TO 112
415
+ 110 DO 111 I=1,MR
416
+ FI = Q(I,J)
417
+ Q(I,J) = Q(I,J)-Q(I,JM1)-Q(I,JP1)+Q(I,JM2)+Q(I,JP2)
418
+ B(I) = FI+Q(I,J)-Q(I,JM3)-Q(I,JP3)
419
+ 111 CONTINUE
420
+ 112 CONTINUE
421
+ CALL TRIX (I2R,0,MR,A,BB,C,B,TCOS,D,W)
422
+ DO 113 I=1,MR
423
+ Q(I,J) = Q(I,J)+B(I)
424
+ 113 CONTINUE
425
+ C
426
+ C END OF REDUCTION FOR REGULAR UNKNOWNS.
427
+ C
428
+ 114 CONTINUE
429
+ C
430
+ C BEGIN SPECIAL REDUCTION FOR LAST UNKNOWN.
431
+ C
432
+ J = JSTOP+JR
433
+ 115 NLAST = J
434
+ JM1 = J-I2RBY2
435
+ JM2 = J-I2R
436
+ JM3 = JM2-I2RBY2
437
+ IF (NROD .EQ. 0) GO TO 125
438
+ C
439
+ C ODD NUMBER OF UNKNOWNS
440
+ C
441
+ IF (I2R .NE. 1) GO TO 117
442
+ DO 116 I=1,MR
443
+ B(I) = Q(I,J)
444
+ Q(I,J) = Q(I,JM2)
445
+ 116 CONTINUE
446
+ GO TO 123
447
+ 117 DO 118 I=1,MR
448
+ B(I) = Q(I,J)+.5*(Q(I,JM2)-Q(I,JM1)-Q(I,JM3))
449
+ 118 CONTINUE
450
+ IF (NRODPR .NE. 0) GO TO 120
451
+ DO 119 I=1,MR
452
+ II = IP+I
453
+ Q(I,J) = Q(I,JM2)+P(II)
454
+ 119 CONTINUE
455
+ IP = IP-MR
456
+ GO TO 122
457
+ 120 CONTINUE
458
+ DO 121 I=1,MR
459
+ Q(I,J) = Q(I,J)-Q(I,JM1)+Q(I,JM2)
460
+ 121 CONTINUE
461
+ 122 IF (LR .EQ. 0) GO TO 123
462
+ CALL COSGEN (LR,1,FNUM2,0.5,TCOS(KR+1))
463
+ 123 CONTINUE
464
+ CALL COSGEN (KR,1,FNUM2,0.5,TCOS)
465
+ CALL TRIX (KR,LR,MR,A,BB,C,B,TCOS,D,W)
466
+ DO 124 I=1,MR
467
+ Q(I,J) = Q(I,J)+B(I)
468
+ 124 CONTINUE
469
+ KR = KR+I2R
470
+ GO TO 141
471
+ 125 CONTINUE
472
+ C
473
+ C EVEN NUMBER OF UNKNOWNS
474
+ C
475
+ JP1 = J+I2RBY2
476
+ JP2 = J+I2R
477
+ IF (I2R .NE. 1) GO TO 129
478
+ DO 126 I=1,MR
479
+ B(I) = Q(I,J)
480
+ 126 CONTINUE
481
+ TCOS(1) = 0.
482
+ CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
483
+ IP = 0
484
+ IPSTOR = MR
485
+ DO 127 I=1,MR
486
+ P(I) = B(I)
487
+ B(I) = B(I)+Q(I,N)
488
+ 127 CONTINUE
489
+ TCOS(1) = -1.+2.*FLOAT(NP/2)
490
+ TCOS(2) = 0.
491
+ CALL TRIX (1,1,MR,A,BB,C,B,TCOS,D,W)
492
+ DO 128 I=1,MR
493
+ Q(I,J) = Q(I,JM2)+P(I)+B(I)
494
+ 128 CONTINUE
495
+ GO TO 140
496
+ 129 CONTINUE
497
+ DO 130 I=1,MR
498
+ B(I) = Q(I,J)+.5*(Q(I,JM2)-Q(I,JM1)-Q(I,JM3))
499
+ 130 CONTINUE
500
+ IF (NRODPR .NE. 0) GO TO 132
501
+ DO 131 I=1,MR
502
+ II = IP+I
503
+ B(I) = B(I)+P(II)
504
+ 131 CONTINUE
505
+ GO TO 134
506
+ 132 CONTINUE
507
+ DO 133 I=1,MR
508
+ B(I) = B(I)+Q(I,JP2)-Q(I,JP1)
509
+ 133 CONTINUE
510
+ 134 CONTINUE
511
+ CALL COSGEN (I2R,1,0.5,0.0,TCOS)
512
+ CALL TRIX (I2R,0,MR,A,BB,C,B,TCOS,D,W)
513
+ IP = IP+MR
514
+ IPSTOR = MAX0(IPSTOR,IP+MR)
515
+ DO 135 I=1,MR
516
+ II = IP+I
517
+ P(II) = B(I)+.5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
518
+ B(I) = P(II)+Q(I,JP2)
519
+ 135 CONTINUE
520
+ IF (LR .EQ. 0) GO TO 136
521
+ CALL COSGEN (LR,1,FNUM2,0.5,TCOS(I2R+1))
522
+ CALL MERGE (TCOS,0,I2R,I2R,LR,KR)
523
+ GO TO 138
524
+ 136 DO 137 I=1,I2R
525
+ II = KR+I
526
+ TCOS(II) = TCOS(I)
527
+ 137 CONTINUE
528
+ 138 CALL COSGEN (KR,1,FNUM2,0.5,TCOS)
529
+ CALL TRIX (KR,KR,MR,A,BB,C,B,TCOS,D,W)
530
+ DO 139 I=1,MR
531
+ II = IP+I
532
+ Q(I,J) = Q(I,JM2)+P(II)+B(I)
533
+ 139 CONTINUE
534
+ 140 CONTINUE
535
+ LR = KR
536
+ KR = KR+JR
537
+ 141 CONTINUE
538
+ NR = (NLAST-1)/JR+1
539
+ IF (NR .LE. 3) GO TO 142
540
+ I2R = JR
541
+ NRODPR = NROD
542
+ GO TO 101
543
+ 142 CONTINUE
544
+ C
545
+ C BEGIN SOLUTION
546
+ C
547
+ J = 1+JR
548
+ JM1 = J-I2R
549
+ JP1 = J+I2R
550
+ JM2 = NLAST-I2R
551
+ IF (NR .EQ. 2) GO TO 180
552
+ IF (LR .NE. 0) GO TO 167
553
+ IF (N .NE. 3) GO TO 156
554
+ C
555
+ C CASE N = 3.
556
+ C
557
+ GO TO (143,148,143),NP
558
+ 143 DO 144 I=1,MR
559
+ B(I) = Q(I,2)
560
+ B2(I) = Q(I,1)+Q(I,3)
561
+ B3(I) = 0.
562
+ 144 CONTINUE
563
+ GO TO (146,146,145),NP
564
+ 145 TCOS(1) = -1.
565
+ TCOS(2) = 1.
566
+ K1 = 1
567
+ GO TO 147
568
+ 146 TCOS(1) = -2.
569
+ TCOS(2) = 1.
570
+ TCOS(3) = -1.
571
+ K1 = 2
572
+ 147 K2 = 1
573
+ K3 = 0
574
+ K4 = 0
575
+ GO TO 150
576
+ 148 DO 149 I=1,MR
577
+ B(I) = Q(I,2)
578
+ B2(I) = Q(I,3)
579
+ B3(I) = Q(I,1)
580
+ 149 CONTINUE
581
+ CALL COSGEN (3,1,0.5,0.0,TCOS)
582
+ TCOS(4) = -1.
583
+ TCOS(5) = 1.
584
+ TCOS(6) = -1.
585
+ TCOS(7) = 1.
586
+ K1 = 3
587
+ K2 = 2
588
+ K3 = 1
589
+ K4 = 1
590
+ 150 CALL TRI3 (MR,A,BB,C,K,B,B2,B3,TCOS,D,W,W2,W3)
591
+ DO 151 I=1,MR
592
+ B(I) = B(I)+B2(I)+B3(I)
593
+ 151 CONTINUE
594
+ GO TO (153,153,152),NP
595
+ 152 TCOS(1) = 2.
596
+ CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
597
+ 153 DO 154 I=1,MR
598
+ Q(I,2) = B(I)
599
+ B(I) = Q(I,1)+B(I)
600
+ 154 CONTINUE
601
+ TCOS(1) = -1.+4.*FNUM
602
+ CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
603
+ DO 155 I=1,MR
604
+ Q(I,1) = B(I)
605
+ 155 CONTINUE
606
+ JR = 1
607
+ I2R = 0
608
+ GO TO 188
609
+ C
610
+ C CASE N = 2**P+1
611
+ C
612
+ 156 CONTINUE
613
+ DO 157 I=1,MR
614
+ B(I) = Q(I,J)+Q(I,1)-Q(I,JM1)+Q(I,NLAST)-Q(I,JM2)
615
+ 157 CONTINUE
616
+ GO TO (158,160,158),NP
617
+ 158 DO 159 I=1,MR
618
+ B2(I) = Q(I,1)+Q(I,NLAST)+Q(I,J)-Q(I,JM1)-Q(I,JP1)
619
+ B3(I) = 0.
620
+ 159 CONTINUE
621
+ K1 = NLAST-1
622
+ K2 = NLAST+JR-1
623
+ CALL COSGEN (JR-1,1,0.0,1.0,TCOS(NLAST))
624
+ TCOS(K2) = 2.*FLOAT(NP-2)
625
+ CALL COSGEN (JR,1,0.5-FNUM,0.5,TCOS(K2+1))
626
+ K3 = (3-NP)/2
627
+ CALL MERGE (TCOS,K1,JR-K3,K2-K3,JR+K3,0)
628
+ K1 = K1-1+K3
629
+ CALL COSGEN (JR,1,FNUM,0.5,TCOS(K1+1))
630
+ K2 = JR
631
+ K3 = 0
632
+ K4 = 0
633
+ GO TO 162
634
+ 160 DO 161 I=1,MR
635
+ FI = (Q(I,J)-Q(I,JM1)-Q(I,JP1))/2.
636
+ B2(I) = Q(I,1)+FI
637
+ B3(I) = Q(I,NLAST)+FI
638
+ 161 CONTINUE
639
+ K1 = NLAST+JR-1
640
+ K2 = K1+JR-1
641
+ CALL COSGEN (JR-1,1,0.0,1.0,TCOS(K1+1))
642
+ CALL COSGEN (NLAST,1,0.5,0.0,TCOS(K2+1))
643
+ CALL MERGE (TCOS,K1,JR-1,K2,NLAST,0)
644
+ K3 = K1+NLAST-1
645
+ K4 = K3+JR
646
+ CALL COSGEN (JR,1,0.5,0.5,TCOS(K3+1))
647
+ CALL COSGEN (JR,1,0.0,0.5,TCOS(K4+1))
648
+ CALL MERGE (TCOS,K3,JR,K4,JR,K1)
649
+ K2 = NLAST-1
650
+ K3 = JR
651
+ K4 = JR
652
+ 162 CALL TRI3 (MR,A,BB,C,K,B,B2,B3,TCOS,D,W,W2,W3)
653
+ DO 163 I=1,MR
654
+ B(I) = B(I)+B2(I)+B3(I)
655
+ 163 CONTINUE
656
+ IF (NP .NE. 3) GO TO 164
657
+ TCOS(1) = 2.
658
+ CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
659
+ 164 DO 165 I=1,MR
660
+ Q(I,J) = B(I)+.5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
661
+ B(I) = Q(I,J)+Q(I,1)
662
+ 165 CONTINUE
663
+ CALL COSGEN (JR,1,FNUM,0.5,TCOS)
664
+ CALL TRIX (JR,0,MR,A,BB,C,B,TCOS,D,W)
665
+ DO 166 I=1,MR
666
+ Q(I,1) = Q(I,1)-Q(I,JM1)+B(I)
667
+ 166 CONTINUE
668
+ GO TO 188
669
+ C
670
+ C CASE OF GENERAL N WITH NR = 3 .
671
+ C
672
+ 167 CONTINUE
673
+ DO 168 I=1,MR
674
+ B(I) = Q(I,1)-Q(I,JM1)+Q(I,J)
675
+ 168 CONTINUE
676
+ IF (NROD .NE. 0) GO TO 170
677
+ DO 169 I=1,MR
678
+ II = IP+I
679
+ B(I) = B(I)+P(II)
680
+ 169 CONTINUE
681
+ GO TO 172
682
+ 170 DO 171 I=1,MR
683
+ B(I) = B(I)+Q(I,NLAST)-Q(I,JM2)
684
+ 171 CONTINUE
685
+ 172 CONTINUE
686
+ DO 173 I=1,MR
687
+ T = .5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
688
+ Q(I,J) = T
689
+ B2(I) = Q(I,NLAST)+T
690
+ B3(I) = Q(I,1)+T
691
+ 173 CONTINUE
692
+ K1 = KR+2*JR
693
+ CALL COSGEN (JR-1,1,0.0,1.0,TCOS(K1+1))
694
+ K2 = K1+JR
695
+ TCOS(K2) = 2.*FLOAT(NP-2)
696
+ K4 = (NP-1)*(3-NP)
697
+ K3 = K2+1-K4
698
+ CALL COSGEN (KR+JR+K4,1,FLOAT(K4)/2.,1.-FLOAT(K4),TCOS(K3))
699
+ K4 = 1-NP/3
700
+ CALL MERGE (TCOS,K1,JR-K4,K2-K4,KR+JR+K4,0)
701
+ IF (NP .EQ. 3) K1 = K1-1
702
+ K2 = KR+JR
703
+ K4 = K1+K2
704
+ CALL COSGEN (KR,1,FNUM2,0.5,TCOS(K4+1))
705
+ K3 = K4+KR
706
+ CALL COSGEN (JR,1,FNUM,0.5,TCOS(K3+1))
707
+ CALL MERGE (TCOS,K4,KR,K3,JR,K1)
708
+ K4 = K3+JR
709
+ CALL COSGEN (LR,1,FNUM2,0.5,TCOS(K4+1))
710
+ CALL MERGE (TCOS,K3,JR,K4,LR,K1+K2)
711
+ CALL COSGEN (KR,1,FNUM2,0.5,TCOS(K3+1))
712
+ K3 = KR
713
+ K4 = KR
714
+ CALL TRI3 (MR,A,BB,C,K,B,B2,B3,TCOS,D,W,W2,W3)
715
+ DO 174 I=1,MR
716
+ B(I) = B(I)+B2(I)+B3(I)
717
+ 174 CONTINUE
718
+ IF (NP .NE. 3) GO TO 175
719
+ TCOS(1) = 2.
720
+ CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
721
+ 175 DO 176 I=1,MR
722
+ Q(I,J) = Q(I,J)+B(I)
723
+ B(I) = Q(I,1)+Q(I,J)
724
+ 176 CONTINUE
725
+ CALL COSGEN (JR,1,FNUM,0.5,TCOS)
726
+ CALL TRIX (JR,0,MR,A,BB,C,B,TCOS,D,W)
727
+ IF (JR .NE. 1) GO TO 178
728
+ DO 177 I=1,MR
729
+ Q(I,1) = B(I)
730
+ 177 CONTINUE
731
+ GO TO 188
732
+ 178 CONTINUE
733
+ DO 179 I=1,MR
734
+ Q(I,1) = Q(I,1)-Q(I,JM1)+B(I)
735
+ 179 CONTINUE
736
+ GO TO 188
737
+ 180 CONTINUE
738
+ C
739
+ C CASE OF GENERAL N AND NR = 2 .
740
+ C
741
+ DO 181 I=1,MR
742
+ II = IP+I
743
+ B3(I) = 0.
744
+ B(I) = Q(I,1)+P(II)
745
+ Q(I,1) = Q(I,1)-Q(I,JM1)
746
+ B2(I) = Q(I,1)+Q(I,NLAST)
747
+ 181 CONTINUE
748
+ K1 = KR+JR
749
+ K2 = K1+JR
750
+ CALL COSGEN (JR-1,1,0.0,1.0,TCOS(K1+1))
751
+ GO TO (182,183,182),NP
752
+ 182 TCOS(K2) = 2.*FLOAT(NP-2)
753
+ CALL COSGEN (KR,1,0.0,1.0,TCOS(K2+1))
754
+ GO TO 184
755
+ 183 CALL COSGEN (KR+1,1,0.5,0.0,TCOS(K2))
756
+ 184 K4 = 1-NP/3
757
+ CALL MERGE (TCOS,K1,JR-K4,K2-K4,KR+K4,0)
758
+ IF (NP .EQ. 3) K1 = K1-1
759
+ K2 = KR
760
+ CALL COSGEN (KR,1,FNUM2,0.5,TCOS(K1+1))
761
+ K4 = K1+KR
762
+ CALL COSGEN (LR,1,FNUM2,0.5,TCOS(K4+1))
763
+ K3 = LR
764
+ K4 = 0
765
+ CALL TRI3 (MR,A,BB,C,K,B,B2,B3,TCOS,D,W,W2,W3)
766
+ DO 185 I=1,MR
767
+ B(I) = B(I)+B2(I)
768
+ 185 CONTINUE
769
+ IF (NP .NE. 3) GO TO 186
770
+ TCOS(1) = 2.
771
+ CALL TRIX (1,0,MR,A,BB,C,B,TCOS,D,W)
772
+ 186 DO 187 I=1,MR
773
+ Q(I,1) = Q(I,1)+B(I)
774
+ 187 CONTINUE
775
+ 188 CONTINUE
776
+ C
777
+ C START BACK SUBSTITUTION.
778
+ C
779
+ J = NLAST-JR
780
+ DO 189 I=1,MR
781
+ B(I) = Q(I,NLAST)+Q(I,J)
782
+ 189 CONTINUE
783
+ JM2 = NLAST-I2R
784
+ IF (JR .NE. 1) GO TO 191
785
+ DO 190 I=1,MR
786
+ Q(I,NLAST) = 0.
787
+ 190 CONTINUE
788
+ GO TO 195
789
+ 191 CONTINUE
790
+ IF (NROD .NE. 0) GO TO 193
791
+ DO 192 I=1,MR
792
+ II = IP+I
793
+ Q(I,NLAST) = P(II)
794
+ 192 CONTINUE
795
+ IP = IP-MR
796
+ GO TO 195
797
+ 193 DO 194 I=1,MR
798
+ Q(I,NLAST) = Q(I,NLAST)-Q(I,JM2)
799
+ 194 CONTINUE
800
+ 195 CONTINUE
801
+ CALL COSGEN (KR,1,FNUM2,0.5,TCOS)
802
+ CALL COSGEN (LR,1,FNUM2,0.5,TCOS(KR+1))
803
+ CALL TRIX (KR,LR,MR,A,BB,C,B,TCOS,D,W)
804
+ DO 196 I=1,MR
805
+ Q(I,NLAST) = Q(I,NLAST)+B(I)
806
+ 196 CONTINUE
807
+ NLASTP = NLAST
808
+ 197 CONTINUE
809
+ JSTEP = JR
810
+ JR = I2R
811
+ I2R = I2R/2
812
+ IF (JR .EQ. 0) GO TO 210
813
+ JSTART = 1+JR
814
+ KR = KR-JR
815
+ IF (NLAST+JR .GT. N) GO TO 198
816
+ KR = KR-JR
817
+ NLAST = NLAST+JR
818
+ JSTOP = NLAST-JSTEP
819
+ GO TO 199
820
+ 198 CONTINUE
821
+ JSTOP = NLAST-JR
822
+ 199 CONTINUE
823
+ LR = KR-JR
824
+ CALL COSGEN (JR,1,0.5,0.0,TCOS)
825
+ DO 209 J=JSTART,JSTOP,JSTEP
826
+ JM2 = J-JR
827
+ JP2 = J+JR
828
+ IF (J .NE. JR) GO TO 201
829
+ DO 200 I=1,MR
830
+ B(I) = Q(I,J)+Q(I,JP2)
831
+ 200 CONTINUE
832
+ GO TO 203
833
+ 201 CONTINUE
834
+ DO 202 I=1,MR
835
+ B(I) = Q(I,J)+Q(I,JM2)+Q(I,JP2)
836
+ 202 CONTINUE
837
+ 203 CONTINUE
838
+ IF (JR .NE. 1) GO TO 205
839
+ DO 204 I=1,MR
840
+ Q(I,J) = 0.
841
+ 204 CONTINUE
842
+ GO TO 207
843
+ 205 CONTINUE
844
+ JM1 = J-I2R
845
+ JP1 = J+I2R
846
+ DO 206 I=1,MR
847
+ Q(I,J) = .5*(Q(I,J)-Q(I,JM1)-Q(I,JP1))
848
+ 206 CONTINUE
849
+ 207 CONTINUE
850
+ CALL TRIX (JR,0,MR,A,BB,C,B,TCOS,D,W)
851
+ DO 208 I=1,MR
852
+ Q(I,J) = Q(I,J)+B(I)
853
+ 208 CONTINUE
854
+ 209 CONTINUE
855
+ NROD = 1
856
+ IF (NLAST+I2R .LE. N) NROD = 0
857
+ IF (NLASTP .NE. NLAST) GO TO 188
858
+ GO TO 197
859
+ 210 CONTINUE
860
+ C
861
+ C RETURN STORAGE REQUIREMENTS FOR P VECTORS.
862
+ C
863
+ W(1) = IPSTOR
864
+ RETURN
865
+ C
866
+ C REVISION HISTORY---
867
+ C
868
+ C SEPTEMBER 1973 VERSION 1
869
+ C APRIL 1976 VERSION 2
870
+ C JANUARY 1978 VERSION 3
871
+ C DECEMBER 1979 VERSION 3.1
872
+ C FEBRUARY 1985 DOCUMENTATION UPGRADE
873
+ C NOVEMBER 1988 VERSION 3.2, FORTRAN 77 CHANGES
874
+ C-----------------------------------------------------------------------
875
+ END