36 data_fnc,nb_data_fnc, id_fnc, time, t0_delay, tau_new)
40 integer*4 :: nb_fnc,id_fnc,i,nb_data_fnc
41 integer*4 :: np0,np1,np2,np_current
43 integer*4,
dimension(nb_fnc) :: type_fnc
44 integer*4,
dimension(nb_fnc +1) :: ind_fnc
46 real*8 :: val,pi,t_t0,t0,t1,v0,v1
47 real*8 :: tau, scaling, hdur
50 real*8 :: time,beta2,t0_delay
51 real*8 :: dt,tr,te,tp,psv,sum1,ts,svi
53 real*8,
dimension(nb_data_fnc) :: data_fnc
55 real*8,
dimension(:),
allocatable :: svf, int_svf, integ_svf
58 pi = 4.0d0 * datan(1.0d0)
60 select case (type_fnc(id_fnc))
66 t_t0 = time - data_fnc(ind_fnc(id_fnc) +1) - t0_delay
68 * dexp(-1.0d0*data_fnc(ind_fnc(id_fnc))
71 pi = 4.0d0 * datan(1.0d0)
72 t_t0 = time - data_fnc(ind_fnc(id_fnc) +1) - t0_delay
74 * dexp(-0.5d0*data_fnc(ind_fnc(id_fnc))
75 * data_fnc(ind_fnc(id_fnc))*t_t0*t_t0)
78 do i = ind_fnc(id_fnc),ind_fnc(id_fnc+1) -3,2
79 t0 = data_fnc(i) - t0_delay
80 t1 = data_fnc(i +2) - t0_delay
83 if ((time.ge.t0).and.(time.le.t1)) &
88 t_t0 = time - data_fnc(ind_fnc(id_fnc) +1) - t0_delay
89 beta2=data_fnc(ind_fnc(id_fnc))
91 * (-3.0d0 + 2.0d0*beta2*t_t0*t_t0) &
92 * dexp(-beta2*t_t0*t_t0)
95 pi = 4.0d0 * datan(1.0d0)
96 t_t0 = time - data_fnc(ind_fnc(id_fnc) +1) - t0_delay
98 * dexp(-0.5d0*4.d0*pi*pi*data_fnc(ind_fnc(id_fnc)) &
99 * data_fnc(ind_fnc(id_fnc))*t_t0*t_t0)
103 tau = data_fnc(ind_fnc(id_fnc))
104 scaling = data_fnc(ind_fnc(id_fnc) +1)
108 t_t0 = time - t0 - t0_delay
112 tau = data_fnc(ind_fnc(id_fnc))
114 amp = data_fnc(ind_fnc(id_fnc) +1)
115 t_t0 = time - t0_delay
118 if (t_t0 .lt. 0.0d0)
then
133 if (time.lt.t0_delay)
then
135 elseif ((time.ge.t0_delay).and.(time.le.(t0_delay+tau_new)))
then
136 do i = ind_fnc(id_fnc),ind_fnc(id_fnc+1) -3,2
137 t0 = data_fnc(i) + t0_delay
138 t1 = data_fnc(i +2) + t0_delay
141 if ((time.ge.t0).and.(time.le.t1))
then
145 elseif (time.gt.(t0_delay+tau_new))
then
150 if (time.lt.t0_delay)
then
152 elseif ((time.ge.t0_delay).and.(time.le.(t0_delay+tau_new)))
then
154 elseif (time.gt.(t0_delay+tau_new))
then
167 if (time.lt.t0_delay)
then
169 elseif ((time.ge.t0_delay).and.(time.le.(t0_delay+tau_new)))
then
170 do i = ind_fnc(id_fnc),ind_fnc(id_fnc+1) -3,2
172 t0 = data_fnc(i)*tau_new + t0_delay
173 t1 = data_fnc(i +2)*tau_new + t0_delay
179 if ((time.ge.t0).and.(time.le.t1))
then
183 elseif (time.gt.(t0_delay+tau_new))
then
191 scaling = data_fnc(ind_fnc(id_fnc) +1)
195 t_t0 = time - t0 - t0_delay
207 if (time .le. t0_delay)
then
209 elseif ( time .ge. t0_delay + tau_new)
then
220 np_current = int((time-t0_delay)/dt+1.0)
222 if (np_current .gt. np2)
then
223 write(*,*)
'Error in Archuleta function'
224 write(*,*) np2, np_current
228 psv = sqrt(1.+100./(np0*dt))
230 allocate(svf(1:np2));
234 svi = ts*psv/tp*sin(0.5*pi/tp*ts)
240 svi = sqrt(1.+100./ts)
246 svi = sqrt(1.+100./ts)*sin((np2-i)*dt*pi*0.5/(tr-te))
257 allocate(int_svf(1:np2)); int_svf = 0.d0; int_svf(1) = 0;
258 allocate(integ_svf(1:np2)); integ_svf = 0.d0; integ_svf(1
261 int_svf(i) = 0.5*(svf(i)+svf(i-1))*dt;
264 integ_svf(i) = sum(int_svf(2:i));
269 write(*,*)
'Error in Archuleta slip function '
273 deallocate(svf,int_svf,integ_svf)
282 tau = data_fnc(ind_fnc(id_fnc))
283 amp = data_fnc(ind_fnc(id_fnc) +1)
286 *(t_t0 - tau)/amp)**2.0d0) * cos(((2.0d0
287 *(t_t0 - tau) + 2.0d0*dasin(1.0d0)/2.0d0