      SUBROUTINE trapz(a,b,t,k,func)
      INTEGER k
      REAL*8 a,b,t,func
      EXTERNAL func
c
c     Calculo da integral de a ate b de func pela formula dos
c     trapezios. A rotina recebe em t o calculo com 2**(k-1)
c     intervalos e devolve em t o calculo com 2**k intervalos.
c     Se k=0, t=.5*(b-a)*(func(a)+func(b)).
c
      INTEGER j,n
      REAL*8 h,s,x
      if (k.eq.0) then
         t=5.d-1*(b-a)*(func(a)+func(b))
         return
      endif
      n=2**(k-1)
      h=(b-a)/(2*n)
      s=0.d0
      do 10 j=1,n
         x=a+(2*j-1)*h
         s=s+func(x)
 10   continue
      t=5.d-1*t+h*s
      return
      END
