DINT_BODE           Library "JINRLIB"                  D112      
    QINT_BODE

    Author: O.Chuluunbaatar
    Language: Fortran

               INTEGRATION  OF THE ONE VARIABLE FUNCTION
                     BY THE BODE QUADRATURE FORMULA

    The subroutines DINT_BODE and QINT_BODE calculate
    integrals of the one independent variable function
    by the Bode quadrature formula with a given order
    (from 2 up to 12) by steps h on a uniform grid.

    Structure:
    ---------- 
       Type:                             FUNCTION
       User Entry Names:                 DINT_BODE QINT_BODE
       External References:              FUNC - user-supplied function

    Usage:
    ------ 
    S=DINT_BODE (FUNC, A, B, NN, IPOINTS) double precision
    S=QINT_BODE (FUNC, A, B, NN, IPOINTS) quadruple precision
    where:
       A, B       - are limits of integration;
       NN         - is number of auxiliary subintervals;
       IPOINTS    - is number of nodes  of the Bode quadrature formula;
                    IPOINTS can accept values from 2 up to 11,
                    for  double precision calculation - up to 6;
       FUNC       - is name of the subprogram-function, constituent users
                    for calculation of integrand function. The name FUNC
                  - should be declared EXTERNAL in the calling subroutine.
       NN,IPOINTS - are of the type INTEGER;
       A,B,FUNC,S - are for DINT_BODE - REAL*8, for QINT_BODE - REAL*16.


    Method:
    -------
    The Bode quadrature formulas will be used. The  calculation accuracy
    by step h up to O (h ^ (2 [(IPOINTS+1) /2]).

    Notes:
    ------
    The version of the program with quadruple precision
    QINT_BODE exists only for the operating system UNIX.

    References:
    -----------
    1. M. Abramowitz and I. Stegun, Handbook of mathematical
       functions, National Bureau of Standarts, NY, 1964.

    Example:
    --------
       . . .
       MPLICIT REAL*8 (A-H,O-Z)
       DIMENSION DINTVAL(3)
       EXTERNAL FUNC
       A=1.D0
       B=3.D0
       NN=2
       IPOINTS=6 
       WRITE(*,*) 'INTERVAL','  ','[',A,B,']'
       WRITE(*,*) 'NUMBER OF POINTS QUADRATURE RULE OF BODE=',IPOINTS
       DO I=1,3
         DINTVAL(I)=DINT_BODE(FUNC,A,B,NN,IPOINTS)
         WRITE(*,*) 'NN=',NN,'   ','INTVAL=',DINTVAL(I)
         NN=NN*2
       ENDDO
       SIGMA=(DINTVAL(1)-DINTVAL(2))/(DINTVAL(2)-DINTVAL(3))
       EXVAL=(DINTVAL(1)-SIGMA*DINTVAL(2))/(1.D0-SIGMA)
       WRITE(*,*) 'RUNGE COEFFICIENT=',SIGMA
       WRITE(*,*) 'EXTRAPOLATION OF INTEGRAL=',EXVAL
       EXACT=DEXP(-A)-DEXP(-B)
       WRITE(*,*) 'EXACT OF INTEGRAL=        ',EXACT
       WRITE(*,*) 'ERROR=        ',EXACT-EXVAL
       . . .
       FUNCTION FUNC(X)
       IMPLICIT REAL*8 (A-H,O-Z) 
       FUNC=DEXP(-X)
       RETURN
       END

    Result:
    ------- 
       INTERVAL  [       1.000000000000000        3.000000000000000]
       NUMBER OF POINTS QUADRATURE RULE OF BODE=          6
       NN=          2   INTVAL=  3.180924625011772E-001
       NN=          4   INTVAL=  3.180923742385016E-001
       NN=          8   INTVAL=  3.180923728261328E-001
       RUNGE COEFFICIENT=      62.492653158681330
       EXTRAPOLATION OF INTEGRAL=  3.180923728031647E-001
       EXACT OF INTEGRAL=          3.180923728035784E-001
       ERROR=          4.136690989753333E-013