Computes time evolution function.
38
39
40
42
43 implicit none
44
45 integer*4 :: nb_fnc,id_fnc,i,nb_data_fnc, idx
46 integer*4 :: ind_start, ind_end, timeit
47
48 integer*4, dimension(nb_fnc) :: type_fnc
49 integer*4, dimension(nb_fnc +1) :: ind_fnc
50
51 real*8 :: pi,t_t0,t0,t1,v0,v1,omega, fp, fac
52 real*8 :: tau,scaling,hdur
53 real*8 :: amp, ps0, tplus, alpha,time,beta2,dist,vel
54
55 real*8, dimension(nb_data_fnc) :: data_fnc
56 real*8, dimension(1) :: valmax
57
58
60
61 pi = 4.0d0 * datan(1.0d0)
62
63
64
65
66
67
68
69
70
71
72
73 select case (type_fnc(id_fnc))
74
75 case(0)
77
78 case(1)
79 t_t0 = time - data_fnc(ind_fnc(id_fnc) +1)
81 * dexp(-1.0d0*data_fnc(ind_fnc(id_fnc))*t_t0*t_t0)
82
83 case(2)
84 pi = 4.0d0 * datan(1.0d0)
85 t_t0 = time - data_fnc(ind_fnc(id_fnc) +1)
87 * dexp(-0.5d0*data_fnc(ind_fnc(id_fnc)) &
88 * data_fnc(ind_fnc(id_fnc))*t_t0*t_t0)
89
90 case(3)
91 ind_start = ind_fnc(id_fnc); ind_end = ind_fnc(id_fnc+1)-3;
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109 if (time >= data_fnc(ind_end-1)) then
110 v1 = data_fnc(ind_end + 2);
112 else
114
115
116
117 t0 = data_fnc(ind_start-1 + 2*idx-1); t1 = data_fnc
118 v0 = data_fnc(ind_start-1 + 2*idx); v1 = data_fnc
119
121
122 endif
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146 case(773)
148
149 case(4)
150 t_t0 = time - data_fnc(ind_fnc(id_fnc) +1)
151 beta2 = data_fnc(ind_fnc(id_fnc))
153 * (-3.0d0 + 2.0d0*beta2*t_t0*t_t0) &
154 * dexp(-beta2*t_t0*t_t0)
155
156 case(5)
157 t_t0 = time - data_fnc(ind_fnc(id_fnc) +1)
158 fp = data_fnc(ind_fnc(id_fnc));
159 alpha = 2.d0*(pi*fp)**2
160 fac = 2*pi*fp*dsqrt(dexp(1.d0))
162
163
164
165
166
167 case(6)
168 pi = 4.0d0 * datan(1.0d0)
169 t_t0 = time - data_fnc(ind_fnc(id_fnc) +1)
171 * dexp(-0.5d0*4.d0*pi*pi*data_fnc(ind_fnc(id_fnc)) &
172 * data_fnc(ind_fnc(id_fnc))*t_t0*t_t0)
173
174
175 case(7)
176 t_t0 = time - data_fnc(ind_fnc(id_fnc) +1)
178 -24*data_fnc(ind_fnc(id_fnc))**2 * (t_t0**2)
179 +8.0d0*data_fnc(ind_fnc(id_fnc))**3 * (t_t0*
180 * dexp(-1.0d0*data_fnc(ind_fnc(id_fnc))*t_t0*t_t0)
181
182
183 case(8)
184
185 omega = data_fnc(ind_fnc(id_fnc))*2*pi
187
188 case(9)
189
190 omega = data_fnc(ind_fnc(id_fnc))*2*pi
192
193
194
195 case(12)
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213 t_t0 = time - data_fnc(ind_fnc(id_fnc) +2)
215 * (1/(1+exp(-data_fnc(ind_fnc(id_fnc) +1)*(t_t0
216
217 case(13)
218
219 tau = data_fnc(ind_fnc(id_fnc)); scaling = data_fnc(ind_fnc(id_fnc
220 t0 = 2.0 * tau; hdur = tau/2.0; t_t0 = time - t0
222
223 case(14)
224
225 tau = data_fnc(ind_fnc(id_fnc));
226 tau = tau*0.25d0;
227 amp = data_fnc(ind_fnc(id_fnc) +1)
228 t_t0 = time
229 if (t_t0 .lt. 0.0d0) then
231 elseif (t_t0 .eq. 0.0d0) then
233 else
235 endif
236
237 case(15)
238
239 ps0 = data_fnc(ind_fnc(id_fnc))
240 tplus = data_fnc(ind_fnc(id_fnc) +1); alpha = data_fnc(ind_fnc
241 t_t0 = time - data_fnc(ind_fnc(id_fnc) +3)
242 if (t_t0 .lt. 0.0d0) then
244 else
246 endif
247
248
249
250
251
252
253
254
255
256
257
258 case(30)
259
260
261 do i = ind_fnc(id_fnc),ind_fnc(id_fnc+1) -3,2
262 t0 = data_fnc(i) ; t1 = data_fnc(i +2)
263 v0 = data_fnc(i +1); v1 = data_fnc(i +3)
264
265
266 if (((time -dist/vel) .ge. t0) .and. ((time -dist/vel) .le.then
268 return
269 endif
270 enddo
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292 case(60,62)
293
294 do i = ind_fnc(id_fnc),ind_fnc(id_fnc+1) -3,2
295
296 t0 = data_fnc(i); t1 = data_fnc(i +2)
297 v0 = data_fnc(i +1); v1 = data_fnc(i +3)
298
299 if (abs(time).le.data_fnc(ind_fnc(id_fnc))) then
301 elseif ((abs(time).ge.t0).and.(abs(time).le.t1)) then
303 elseif (abs(time).ge.data_fnc(ind_fnc(id_fnc+1)-2)) then
305 endif
306 enddo
307
308 case(61,63)
309
310 do i = ind_fnc(id_fnc),ind_fnc(id_fnc+1) -3,2
311 t0 = data_fnc(i); t1 = data_fnc(i +2)
312 v0 = data_fnc(i +1); v1 = data_fnc(i +3)
313
314 if (abs(time).le.data_fnc(ind_fnc(id_fnc))) then
316 elseif ((abs(time).ge.t0).and.(abs(time).le.t1)) then
318 elseif (abs(time).ge.data_fnc(ind_fnc(id_fnc+1)-2)) then
320 endif
321 enddo
322
323 case(99)
324
325 tau = data_fnc(ind_fnc(id_fnc)); amp = data_fnc(ind_fnc(id_fnc
326 t_t0 = time
328 *(t_t0 - tau)/amp)**2.0d0)&
329 * cos(((2.0d0 * 2.0d0*dasin(1.0d0))*1.5d0)&
330 *(t_t0 - tau) + 2.0d0*dasin(1.0d0)/2.0d0))
331
332 case(100)
333
334 amp = data_fnc(ind_fnc(id_fnc))
336
337
338 case(101)
340 case default
342
343 end select
344
345
346 return
347
real *8 function get_func_value(nb_fnc, type_fnc, ind_fnc, data_fnc, nb_data_fnc, id_fnc, time
Computes time evolution function.
pure recursive integer function, public binarysearch_real(vec, scal, min, max)