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 (21 years ago) by xsun
File size: 11995 byte(s)
Log Message:
This is the dp and read file

File Contents

# User Rev Content
1 xsun 581
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