C+ C NAME: C nrTrapZD C PURPOSE: C CATEGORY: C CALLING SEQUENCE: subroutine nrTrapZD(Func,A,B,S,N) C INPUTS: C OUTPUTS: C CALLS: C Say, Choose, nrPolInt C EXTERNAL: C INCLUDE: C COMMON BLOCKS: C SIDE EFFECTS: C RESTRICTIONS: C PROCEDURE: C See Numerical Recipes C MODIFICATION HISTORY: C JUN-1993, Paul Hick (UCSD) C- real Func real A real B real S integer N save IT BA = B-A if (N .eq. 1) then S = 0.5*BA*(Func(A)+Func(B)) IT = 1 ! # points added on next call else TNM = IT DEL = BA/TNM ! Spacing of points to be added X = A+0.5*DEL SUM = 0. do J=1,IT SUM = SUM+Func(X) X = X+DEL end do S = 0.5*(S+BA*SUM/TNM) ! Refined S value IT = 2*IT end if return end