1 subroutine tautsp ( tau, gtau, ntau, gamma, s,
2 & break, coef, l, k, iflag )
90 integer iflag,k,l,ntau, i,method,ntaum1
91 double precision alph,break(1),coef(4,1),gamma,
92 & gtau(ntau),s(ntau,6),tau(ntau)
93 & ,alpha,c,d,del,denom,divdif,entry,entry3,factor,factr2,gam
94 & ,onemg3,onemzt,ratio,sixth,temp,
x,z,zeta,zt2
95 alph(
x) = dmin1(1.0d+00,onemg3/
x)
98 if (ntau .ge. 4)
go to 5
100 600
format(8h ntau = ,i4,20h. should be .ge. 4 .)
107 s(i,1) = tau(i+1) - tau(i)
108 if (s(i,1) .gt. 0.0d+00)
go to 6
109 print 610,i,tau(i),tau(i+1)
110 610
format(7h point ,i3,13h and the next,2e15.6,15h are disordered)
112 6 s(i+1,4) = (gtau(i+1)-gtau(i))/s(i,1)
114 7 s(i,4) = s(i+1,4) - s(i,4)
122 s(2,2) = s(1,1)/3.0d+00
123 sixth = 1.0d+00/6.0d+00
126 if (gam .le. 0.0d+00) method = 1
127 if ( gam .le. 3.0d+00)
go to 9
130 9 onemg3 = 1.0d+00 - gam/3.0d+00
135 go to (19,11,12),method
136 11
if (s(i,4)*s(i+1,4) .lt. 0.0d+00)
go to 19
137 12 temp = dabs(s(i+1,4))
138 denom = dabs(s(i,4)) + temp
139 if (denom .eq. 0.0d+00)
go to 19
141 if (dabs(z - 0.5d+00) .le. sixth) z = 0.5d+00
145 if (z - 0.5d+00) 21,22,23
147 onemzt = 1.0d+00 - zeta
150 factor = zeta/(alpha*(zt2-1.0d+00) + 1.0d+00)
151 s(i,6) = zeta*factor/6.0d+00
152 s(i,2) = s(i,2) + s(i,1)
153 & *((1.0d+00-alpha*onemzt)*factor/2.0d+00 - s(i,6))
157 if (s(i,2) .le. 0.0d+00) s(i,2) = 1.0d+00
158 s(i,3) = s(i,1)/6.0d+00
160 22 s(i,2) = s(i,2) + s(i,1)/3.0d+00
161 s(i,3) = s(i,1)/6.0d+00
163 23 onemzt = gam*(1.0d+00 - z)
164 zeta = 1.0d+00 - onemzt
166 factor = onemzt/(1.0d+00 - alpha*zeta*(1.0d+00+onemzt))
167 s(i,6) = onemzt*factor/6.0d+00
168 s(i,2) = s(i,2) + s(i,1)/3.
169 s(i,3) = s(i,6)*s(i,1)
170 25
if (i .gt. 2)
go to 30
174 s(1,2) = s(1,1)/6.0d+00
177 if (z - 0.5d+00) 26,27,28
178 26 factr2 = zeta*(alpha*(zt2-1.0d+00)
179 & + 1.0d+00)/(alpha*(zeta*zt2-1.0d+00)+1.0d+00)
180 ratio = factr2*s(2,1)/s(1,2)
181 s(2,2) = factr2*s(2,1) + s(1,1)
182 s(2,3) = -factr2*s(1,1)
184 27 ratio = s(2,1)/s(1,2)
185 s(2,2) = s(2,1) + s(1,1)
188 28 ratio = s(2,1)/s(1,2)
189 s(2,2) = s(2,1) + s(1,1)
190 s(2,3) = -s(1,1)*6.0d+00*alpha*s(2,6)
195 29 s(2,2) = ratio*s(1,3) + s(2,2)
196 s(2,3) = ratio*entry3 + s(2,3)
198 s(2,4) = ratio*s(1,4)
206 s(i,2) = ratio*s(i-1,3) + s(i,2)
207 s(i,4) = ratio*s(i-1,4) + s(i,4)
211 35
if (z - 0.5d+00) 36,37,38
212 36 ratio = -s(i,6)*s(i,1)/s(i,2)
213 s(i+1,2) = s(i,1)/3.0d+00
215 37 ratio = -(s(i,1)/6.0d+00)/s(i,2)
216 s(i+1,2) = s(i,1)/3.0d+00
218 38 ratio = -(s(i,1)/6.0d+00)/s(i,2)
219 s(i+1,2) = s(i,1)*((1.0d+00-zeta*alpha)*factor/2. - s(i,6))
222 if (i .lt. ntaum1)
go to 10
228 entry = ratio*s(i-1,3) + s(i,2) + s(i,1)/3.0d+00
229 s(i+1,2) = s(i,1)/6.0d+00
230 s(i+1,4) = ratio*s(i-1,4) + s(i,4)
231 if (z - 0.5d+00) 41,42,43
232 41 ratio = s(i,1)*6.0d+00*s(i-1,6)*alpha/s(i-1,2)
233 s(i,2) = ratio*s(i-1,3) + s(i,1) + s(i-1,1)
236 42 ratio = s(i,1)/s(i-1,2)
237 s(i,2) = ratio*s(i-1,3) + s(i,1) + s(i-1,1)
240 43 factr2 = onemzt*(alpha*(onemzt**2-1.0d+00)+1.0d+00)/
241 * (alpha*(onemzt**3-1.0d+00)+1.0d+00)
242 ratio = factr2*s(i,1)/s(i-1,2)
243 s(i,2) = ratio*s(i-1,3) + factr2*s(i-1,1) + s(i,1)
244 s(i,3) = -factr2*s(i-1,1)
249 45 s(i,4) = ratio*s(i-1,4)
250 ratio = -entry/s(i,2)
251 s(i+1,2) = ratio*s(i,3) + s(i+1,2)
252 s(i+1,4) = ratio*s(i,4) + s(i+1,4)
256 s(ntau,4) = s(ntau,4)/s(ntau,2)
257 50 s(i,4) = (s(i,4) - s(i,3)*s(i+1,4))/s(i,2)
259 if (i .gt. 1)
go to 50
260 s(1,4) = (s(1,4)-s(1,3)*s(2,4)-entry3*s(3,4))/s(1,2)
269 divdif = (gtau(i+1)-gtau(i))/s(i,1)
271 if (z - 0.5d+00) 61,62,63
272 61
if (z .eq. 0.0d+00)
go to 65
274 onemzt = 1.0d+00 - zeta
279 break(l) = tau(i) + del
282 factor = onemzt**2*alpha
283 coef(1,l) = gtau(i) + divdif*del
284 & + s(i,1)**2*(d*onemzt*(factor-1.0d+00)
285 & +c*zeta*(zt2-1.0d+00))
286 coef(2,l) = divdif + s(i,1)*(d*(1.0d+00-3.0d+00*factor)
287 & +c*(3.0d+00*zt2-1.0d+00))
288 coef(3,l) = 6.0d+00*(d*alpha*onemzt + c*zeta)
289 coef(4,l) = 6.0d+00*(c - d*alpha)/s(i,1)
290 coef(4,l-1) = coef(4,l) - 6.0d+00*d*(1.0d+00-alpha)/(del*zt2)
291 coef(2,l-1) = coef(2,l) - del*(coef(3,l)
292 & -(del/2.0d+00)*coef(4,l-1))
294 62 coef(2,l) = divdif - s(i,1)*(2.0d+00*s(i,4) + s(i+1,4))/6.0d+00
295 coef(4,l) = (s(i+1,4)-s(i,4))/s(i,1)
297 63 onemzt = gam*(1.0d+00 - z)
298 if (onemzt .eq. 0.0d+00)
go to 65
299 zeta = 1.0d+00 - onemzt
304 break(l+1) = tau(i) + del
305 coef(2,l) = divdif - s(i,1)*(2.0d+00*d + c)
306 coef(4,l) = 6.0d+00*(c*alpha - d)/s(i,1)
308 coef(4,l) = coef(4,l-1)
309 & + 6.0d+00*(1.0d+00-alpha)*c/(s(i,1)*onemzt**3)
310 coef(3,l) = coef(3,l-1) + del*coef(4,l-1)
311 coef(2,l) = coef(2,l-1)
312 & +del*(coef(3,l-1)+(del/2.0d+00)*coef(4,l-1))
313 coef(1,l) = coef(1,l-1)
314 & +del*(coef(2,l-1)+(del/2.0d+00)*(coef(3,l-1)
315 & +(del/3.0d+00)*coef(4,l-1)))
317 65 coef(2,l) = divdif
321 70 break(l) = tau(i+1)
subroutine tautsp(tau, gtau, ntau, gamma, s, break, coef, l, k, iflag)