31 subroutine ccrint(bndlow,bndhi,epsiln,small,sum,neval,f,id)
34 integer id, neval, nstack
35 double precision b1(30), b2(30), b3(30), b4(30), p(30)
36 double precision bndlow, bndhi, acl7, ainsc, ccerr,
37 # cnc1, cnc2, cnc3, cnc4, c7l1, c7l2, c7l3, c7l4,
38 # c8r1, c8r2, c8r3, c8r4,
39 # cvgtol, err, diff, h, hmin, rombrg, rt3,
40 # sa, sc, sd, small, sum,
41 # t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, epsiln,
42 # x0, x1, x2, x3, x4, x5, x6, x7, x8, xx
43 double precision dabs, f
50 data cnc1 /0.3111111111111111d0 /
51 # cnc2 /0.6222222222222222d0 /
52 # cnc3 /0.5333333333333333d0 /
53 # cnc4 /1.4222222222222222d0 /
60 data c8r1 /0.3061728395061728d0 /
61 # c8r2 /0.6151675485008818d0 /
62 # c8r3 /0.4966490299823633d0 /
63 # c8r4 /1.444797178130511d0 /
70 data c7l1 /0.1142857142857143d0 /
71 # c7l2 /2.082539682539683d0 /
72 # c7l3 /1.828571428571429d0 /
73 # c7l4 /1.015873015873016d0 /
75 data rt3 /1.732050807568877d0 /
82 h = (bndhi-bndlow)*0.25d0
109 if (dabs(h) .le. dabs(hmin))
go to 9
122 if (nstack.eq.0) cvgtol = err
137 rombrg = (c8r1*sa + c8r2*t4 +c8r3*sc + c8r4*sd)*h
138 ainsc = (cnc1*sa + cnc2*t4 +cnc3*sc + cnc4*sd)*h
139 diff = dabs(rombrg-ainsc)
141 if ( rombrg .ne. 0.0d0 .and. ainsc .ne. 0.0d0)
then
142 if ( diff .gt. cvgtol
143 # .and. diff/dabs( 0.5d0*(rombrg+ainsc) ) .gt. cvgtol*1.0d-2 )
158 t9 = f(x2-xx) + f(x2+xx)
159 t10 = f(x6-xx) + f(x6+xx)
161 acl7 = 0.5d0*h*( c7l1*(sa+2.d0*t4) + c7l2*sc + c7l3*sd
163 diff = dabs( acl7-rombrg )
164 ccerr = ( dabs(0.5d0*(t0+t4)+t1+t3-t2-t9 )
165 # + dabs(0.5d0*(t4+t8)+t5+t7-t6-t10) )*h*64.d0/945.d0
166 if ( ccerr .gt. diff ) diff = ccerr
168 if ( rombrg .ne. 0.0d0 .and. acl7 .ne. 0.0d0)
then
169 if ( diff .gt. cvgtol
170 # .and.diff/dabs(0.5d0*(acl7+rombrg)) .gt. cvgtol/1.0d2)
goto 10
181 if (diff .lt. cvgtol) err = err + diff
185 if (nstack.le.0)
return
209 if(nstack.gt.30)
then
211 write(*,*)
'CCRINT: more than 30 subdomain divisions'
239 subroutine ccrin1(bndlow,bndhi,epsiln,small,sum,neval,f,id)
242 integer id, neval, nstack
243 double precision b1(30), b2(30), b3(30), b4(30), p(30)
244 double precision bndlow, bndhi, acl7, ainsc, ccerr,
245 # cnc1, cnc2, cnc3, cnc4, c7l1, c7l2, c7l3, c7l4,
246 # c8r1, c8r2, c8r3, c8r4,
247 # cvgtol, err, diff, h, hmin, rombrg, rt3,
248 # sa, sc, sd, small, sum,
249 # t0, t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, epsiln,
250 # x0, x1, x2, x3, x4, x5, x6, x7, x8, xx
251 double precision dabs, f
258 data cnc1 /0.3111111111111111d0 /
259 # cnc2 /0.6222222222222222d0 /
260 # cnc3 /0.5333333333333333d0 /
261 # cnc4 /1.4222222222222222d0 /
268 data c8r1 /0.3061728395061728d0 /
269 # c8r2 /0.6151675485008818d0 /
270 # c8r3 /0.4966490299823633d0 /
271 # c8r4 /1.444797178130511d0 /
278 data c7l1 /0.1142857142857143d0 /
279 # c7l2 /2.082539682539683d0 /
280 # c7l3 /1.828571428571429d0 /
281 # c7l4 /1.015873015873016d0 /
283 data rt3 /1.732050807568877d0 /
290 h = (bndhi-bndlow)*0.25d0
318 if (dabs(h) .le. dabs(hmin))
go to 9
331 if (nstack.eq.0) cvgtol = err
346 rombrg = (c8r1*sa + c8r2*t4 +c8r3*sc + c8r4*sd)*h
347 ainsc = (cnc1*sa + cnc2*t4 +cnc3*sc + cnc4*sd)*h
348 diff = dabs(rombrg-ainsc)
350 if ( rombrg .ne. 0.0d0 .and. ainsc .ne. 0.0d0)
then
351 if ( diff .gt. cvgtol
352 # .and. diff/dabs( 0.5d0*(rombrg+ainsc) ) .gt. cvgtol*1.0d-2 )
367 t9 = f(x2-xx) + f(x2+xx)
368 t10 = f(x6-xx) + f(x6+xx)
370 acl7 = 0.5d0*h*( c7l1*(sa+2.d0*t4) + c7l2*sc + c7l3*sd
372 diff = dabs( acl7-rombrg )
373 ccerr = ( dabs(0.5d0*(t0+t4)+t1+t3-t2-t9 )
374 # + dabs(0.5d0*(t4+t8)+t5+t7-t6-t10) )*h*64.d0/945.d0
375 if ( ccerr .gt. diff ) diff = ccerr
377 if ( rombrg .ne. 0.0d0 .and. acl7 .ne. 0.0d0)
then
378 if ( diff .gt. cvgtol
379 # .and.diff/dabs(0.5d0*(acl7+rombrg)) .gt. cvgtol/1.0d2)
goto 10
390 if (diff .lt. cvgtol) err = err + diff
394 if (nstack.le.0)
return
418 if(nstack.gt.30)
then
420 write(*,*)
'CCRIN1: more than 30 subdomain divisions'
subroutine ccrin1(bndlow, bndhi, epsiln, small, sum, neval, f, id)
subroutine ccrint(bndlow, bndhi, epsiln, small, sum, neval, f, id)