ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/dp/f.37
Revision: 581
Committed: Wed Jul 9 15:14:05 2003 UTC (20 years, 11 months ago) by xsun
File size: 11995 byte(s)
Log Message:
This is the dp and read file

File Contents

# Content
1
2 C *******************************************************************
3 C ** THIS FORTRAN CODE IS INTENDED TO ILLUSTRATE POINTS MADE IN **
4 C ** THE TEXT. TO OUR KNOWLEDGE IT WORKS CORRECTLY. HOWEVER IT IS **
5 C ** THE RESPONSIBILITY OF THE USER TO TEST IT, IF IT IS USED IN A **
6 C ** RESEARCH APPLICATION. **
7 C *******************************************************************
8
9 C *******************************************************************
10 ** FICHE F.37. ROUTINES TO CALCULATE FOURIER TRANSFORMS. **
11 C ** THREE SEPARATE ROUTINES FOR DIFFERENT APPLICATIONS. **
12 C *******************************************************************
13
14
15
16 SUBROUTINE FILONC ( DT, DOM, NMAX, C, CHAT )
17
18 C *******************************************************************
19 C ** CALCULATES THE FOURIER COSINE TRANSFORM BY FILON'S METHOD **
20 C ** **
21 C ** A CORRELATION FUNCTION, C(T), IN THE TIME DOMAIN, IS **
22 C ** TRANSFORMED TO A SPECTRUM CHAT(OMEGA) IN THE FREQUENCY DOMAIN.**
23 C ** **
24 C ** REFERENCE: **
25 C ** **
26 C ** FILON, PROC ROY SOC EDIN, 49 38, 1928. **
27 C ** **
28 C ** PRINCIPAL VARIABLES: **
29 C ** **
30 C ** REAL C(NMAX) THE CORRELATION FUNCTION. **
31 C ** REAL CHAT(NMAX) THE 1-D COSINE TRANSFORM. **
32 C ** REAL DT TIME INTERVAL BETWEEN POINTS IN C. **
33 C ** REAL DOM FREQUENCY INTERVAL FOR CHAT. **
34 C ** INTEGER NMAX NO. OF INTERVALS ON THE TIME AXIS **
35 C ** REAL OMEGA THE FREQUENCY **
36 C ** REAL TMAX MAXIMUM TIME IN CORRL. FUNCTION **
37 C ** REAL ALPHA, BETA, GAMMA FILON PARAMETERS **
38 C ** INTEGER TAU TIME INDEX **
39 C ** INTEGER NU FREQUENCY INDEX **
40 C ** **
41 C ** USAGE: **
42 C ** **
43 C ** THE ROUTINE REQUIRES THAT THE NUMBER OF INTERVALS, NMAX, IS **
44 C ** EVEN AND CHECKS FOR THIS CONDITION. THE FIRST VALUE OF C(T) **
45 C ** IS AT T=0. THE MAXIMUM TIME FOR THE CORRELATION FUNCTION IS **
46 C ** TMAX=DT*NMAX. FOR AN ACCURATE TRANSFORM C(TMAX)=0. **
47 C *******************************************************************
48
49 INTEGER NMAX
50 REAL DT, DOM, C(0:NMAX), CHAT(0:NMAX)
51
52 REAL TMAX, OMEGA, THETA, SINTH, COSTH, CE, CO
53 REAL SINSQ, COSSQ, THSQ, THCUB, ALPHA, BETA, GAMMA
54 INTEGER TAU, NU
55
56 C *******************************************************************
57
58 C ** CHECKS NMAX IS EVEN **
59
60 IF ( MOD ( NMAX, 2 ) .NE. 0 ) THEN
61
62 STOP ' NMAX SHOULD BE EVEN '
63
64 ENDIF
65
66 TMAX = REAL ( NMAX ) * DT
67
68 C ** LOOP OVER OMEGA **
69
70 DO 30 NU = 0, NMAX
71
72 OMEGA = REAL ( NU ) * DOM
73 THETA = OMEGA * DT
74
75 C ** CALCULATE THE FILON PARAMETERS **
76
77 SINTH = SIN ( THETA )
78 COSTH = COS ( THETA )
79 SINSQ = SINTH * SINTH
80 COSSQ = COSTH * COSTH
81 THSQ = THETA * THETA
82 THCUB = THSQ * THETA
83
84 IF ( THETA. EQ. 0.0 ) THEN
85
86 ALPHA = 0.0
87 BETA = 2.0 / 3.0
88 GAMMA = 4.0 / 3.0
89
90 ELSE
91
92 ALPHA = ( 1.0 / THCUB )
93 : * ( THSQ + THETA * SINTH * COSTH - 2.0 * SINSQ )
94 BETA = ( 2.0 / THCUB )
95 : * ( THETA * ( 1.0 + COSSQ ) -2.0 * SINTH * COSTH )
96 GAMMA = ( 4.0 / THCUB ) * ( SINTH - THETA * COSTH )
97
98 ENDIF
99
100 C ** DO THE SUM OVER THE EVEN ORDINATES **
101
102 CE = 0.0
103
104 DO 10 TAU = 0, NMAX, 2
105
106 CE = CE + C(TAU) * COS ( THETA * REAL ( TAU ) )
107
108 10 CONTINUE
109
110 C ** SUBTRACT HALF THE FIRST AND LAST TERMS **
111
112 CE = CE - 0.5 * ( C(0) + C(NMAX) * COS ( OMEGA * TMAX ) )
113
114 C ** DO THE SUM OVER THE ODD ORDINATES **
115
116 CO = 0.0
117
118 DO 20 TAU = 1, NMAX - 1, 2
119
120 CO = CO + C(TAU) * COS ( THETA * REAL ( TAU ) )
121
122 20 CONTINUE
123
124 C ** FACTOR OF TWO FOR THE REAL COSINE TRANSFORM **
125
126 CHAT(NU) = 2.0 * ( ALPHA * C(NMAX) * SIN ( OMEGA * TMAX )
127 : + BETA * CE + GAMMA * CO ) * DT
128
129 30 CONTINUE
130
131 RETURN
132 END
133
134
135
136 SUBROUTINE LADO ( DT, NMAX, C, CHAT )
137
138 C *******************************************************************
139 C ** CALCULATES THE FOURIER COSINE TRANSFORM BY LADO'S METHOD **
140 C ** **
141 C ** A CORRELATION FUNCTION, C(T), IN THE TIME DOMAIN, IS **
142 C ** TRANSFORMED TO A SPECTRUM CHAT(OMEGA) IN THE FREQUENCY DOMAIN.**
143 C ** **
144 C ** REFERENCE: **
145 C ** **
146 C ** LADO, J COMPUT PHYS, 8 417, 1971. **
147 C ** **
148 C ** PRINCIPAL VARIABLES: **
149 C ** **
150 C ** REAL C(NMAX) THE CORRELATION FUNCTION. **
151 C ** REAL CHAT(NMAX) THE 1-D COSINE TRANSFORM. **
152 C ** REAL DT TIME INTERVAL BETWEEN POINTS IN C. **
153 C ** REAL DOM FREQUENCY INTERVAL BETWEEN POINTS IN CHAT.**
154 C ** INTEGER NMAX NO. OF INTERVALS ON THE TIME AXIS **
155 C ** **
156 C ** USAGE: **
157 C ** **
158 C ** THE CORRELATION FUNCTION IS REQUIRED AT HALF INTEGER **
159 C ** INTERVALS, I.E. C(T), T=(TAU-0.5)*DT FOR TAU=1 .. NMAX. **
160 C ** THE COSINE TRANSFORM IS RETURNED AT HALF INTERVALS, I.E. **
161 C ** CHAT(OMEGA), OMEGA=(NU-0.5)*DOM FOR NU = 1 .. NMAX. **
162 C *******************************************************************
163
164 INTEGER NMAX
165 REAL DT, C(NMAX), CHAT(NMAX)
166
167 INTEGER TAU, NU
168 REAL TAUH, NUH, NMAXH, PI, SUM
169 PARAMETER ( PI = 3.1415927 )
170
171 C *******************************************************************
172
173 NMAXH = REAL ( NMAX ) - 0.5
174
175 C ** LOOP OVER OMEGA **
176
177 DO 20 NU = 1, NMAX
178
179 NUH = REAL ( NU ) - 0.5
180 SUM = 0.0
181
182 C ** LOOP OVER T **
183
184 DO 10 TAU = 1, NMAX
185
186 TAUH = REAL ( TAU ) - 0.5
187 SUM = SUM + C(TAU) * COS ( TAUH * NUH * PI / NMAXH )
188
189 10 CONTINUE
190
191 C ** FACTOR OF TWO FOR THE REAL COSINE TRANSFORM **
192
193 CHAT(NU) = 2.0 * DT * SUM
194
195 20 CONTINUE
196
197 RETURN
198 END
199
200
201
202 SUBROUTINE FILONS ( DR, DK, NMAX, H, HHAT )
203
204 C *******************************************************************
205 C ** FOURIER SINE TRANSFORM BY FILON'S METHOD **
206 C ** **
207 C ** A SPATIAL CORRELATION FUNCTION, H(R), IS TRANSFORMED TO **
208 C ** HHAT(K) IN RECIPROCAL SPACE. **
209 C ** **
210 C ** REFERENCE: **
211 C ** **
212 C ** FILON, PROC ROY SOC EDIN, 49 38, 1928. **
213 C ** **
214 C ** PRINCIPAL VARIABLES: **
215 C ** **
216 C ** REAL KVEC THE WAVENUMBER **
217 C ** REAL RMAX MAXIMUM DIST IN CORREL. FUNCTION **
218 C ** REAL ALPHA, BETA, GAMMA FILON PARAMETERS **
219 C ** REAL H(NMAX) THE CORRELATION FUNCTION **
220 C ** REAL HHAT(NMAX) THE 3-D TRANSFORM **
221 C ** REAL DR INTERVAL BETWEEN POINTS IN H **
222 C ** REAL DK INTERVAL BETWEEN POINTS IN HHAT **
223 C ** INTEGER NMAX NO. OF INTERVALS **
224 C ** **
225 C ** USAGE: **
226 C ** **
227 C ** THE ROUTINE REQUIRES THAT THE NUMBER OF INTERVALS, NMAX, IS **
228 C ** EVEN AND CHECKS FOR THIS CONDITION. THE FIRST VALUE OF H(R) **
229 C ** IS AT R=0. THE MAXIMUM R FOR THE CORRELATION FUNCTION IS **
230 C ** RMAX=DR*NMAX. FOR AN ACCURATE TRANSFORM H(RMAX)=0. **
231 C *******************************************************************
232
233 INTEGER NMAX
234 REAL DR, DK, H(0:NMAX), HHAT(0:NMAX)
235
236 REAL RMAX, K, THETA, SINTH, COSTH
237 REAL SINSQ, COSSQ, THSQ, THCUB, ALPHA, BETA, GAMMA
238 REAL SE, SO, FOURPI, R
239 INTEGER IR, IK
240
241 C *******************************************************************
242
243 C ** CHECKS NMAX IS EVEN **
244
245 IF ( MOD ( NMAX, 2 ) .NE. 0 ) THEN
246
247 STOP ' NMAX SHOULD BE EVEN '
248
249 ENDIF
250
251 FOURPI = 16.0 * ATAN ( 1.0 )
252 RMAX = REAL ( NMAX ) * DR
253
254 C ** LOOP OVER K **
255
256 DO 30 IK = 0, NMAX
257
258 K = REAL ( IK ) * DK
259 THETA = K * DR
260
261 C ** CALCULATE THE FILON PARAMETERS **
262
263 SINTH = SIN ( THETA )
264 COSTH = COS ( THETA )
265 SINSQ = SINTH * SINTH
266 COSSQ = COSTH * COSTH
267 THSQ = THETA * THETA
268 THCUB = THSQ * THETA
269
270 IF ( THETA. EQ. 0.0 ) THEN
271
272 ALPHA = 0.0
273 BETA = 2.0 / 3.0
274 GAMMA = 4.0 / 3.0
275
276 ELSE
277
278 ALPHA = ( 1.0 / THCUB )
279 : * ( THSQ + THETA * SINTH * COSTH - 2.0 * SINSQ )
280 BETA = ( 2.0 / THCUB )
281 : * ( THETA * ( 1.0 + COSSQ ) -2.0 * SINTH * COSTH )
282 GAMMA = ( 4.0 / THCUB ) * ( SINTH - THETA * COSTH )
283
284 ENDIF
285
286 C ** THE INTEGRAND IS H(R) * R FOR THE 3-D TRANSFORM **
287
288 C ** DO THE SUM OVER THE EVEN ORDINATES **
289
290 SE = 0.0
291
292 DO 10 IR = 0, NMAX, 2
293
294 R = REAL ( IR ) * DR
295 SE = SE + H(IR) * R * SIN ( K * R )
296
297 10 CONTINUE
298
299 C ** SUBTRACT HALF THE FIRST AND LAST TERMS **
300 C ** HERE THE FIRST TERM IS ZERO **
301
302 SE = SE - 0.5 * ( H(NMAX) * RMAX * SIN ( K * RMAX ) )
303
304 C ** DO THE SUM OVER THE ODD ORDINATES **
305
306 SO = 0.0
307
308 DO 20 IR = 1, NMAX - 1, 2
309
310 R = REAL ( IR ) * DR
311 SO = SO + H(IR) * R * SIN ( K * R )
312
313 20 CONTINUE
314
315 HHAT(IK) = ( - ALPHA * H(NMAX) * RMAX * COS ( K * RMAX)
316 : + BETA * SE + GAMMA * SO ) * DR
317
318 C ** INCLUDE NORMALISING FACTOR **
319
320 HHAT(IK) = FOURPI * HHAT(IK) / K
321
322 30 CONTINUE
323
324 RETURN
325 END
326
327