module integ implicit none integer nrec contains function adapt(f,a,b,acc,eps) result(q) interface function f(x) real*8 f,x end function f end interface real*8 q,a,b,acc,eps,f2,f3 f2=f(a+2*(b-a)/6) f3=f(a+4*(b-a)/6) nrec=0 q=adapt23(f,a,b,acc,eps,f2,f3) end function adapt recursive function adapt23(f,a,b,acc,eps,f2,f3) result(q) interface function f(x) real*8 f,x end function f end interface real*8 a,b,acc,eps,f1,f2,f3,f4,q,r,err nrec=nrec+1 if(nrec>1000000)then q=(a-a)/(a-a) ! NaN return else f1=f(a+(b-a)/6) f4=f(a+5*(b-a)/6) q=(2*f1+f2+f3+2*f4)/6*(b-a) r=(f1+f4+f2+f3)/4*(b-a) if(abs(q-r)/2