FTN,L,B 
C 
C HP92407A INTEGRATION PACKAGE
C 
C SOURCE TAPE 92407-80001 REV. A
C RELOC. TAPE 92407-60001 REV. A
C 
C AUTHOR - T.A. SAPONAS 
C 
C VERSION 2 OCTOBER 1973
C 
C 
      SUBROUTINE STRTA(A,XDLTA,Y1)
C "STRTA" INITIALIZES ARRAY "A" FOR THE START OF RUNNING INTEGRATION. 
C  THE CONTENTS OF "A" ARE AS FOLLOWS:
C   A(1) - PRESENT VALUE OF NUMERIC INTEGRAL
C   A(2) - 1ST ORDER INTEGRATION - STEP SIZE/2. 
C          2ND ORDER INTEGRATION - MINUS STEP SIZE/12.
C   A(3) - PREVIOUS VALUE OF INTEGRAND
C   A(4) - NOT NEEDED FOR 1ST ORDER INTEGRATION 
C          2ND ORDER INTEGRATION - PREVIOUS VALUE BEFORE A(3) 
      DIMENSION A(4)
C INITIALIZE INTEGRAL 
      A = 0.
C INITIALIZE PREVIOUS INTEGRAND 
      A(3) = Y1 
C 
C IF XDLTA IS NEGATIVE THEN 2ND ORDER INTEGRATION IS ASSUMED
      IF(XDLTA)10,20
C 
C INITIALIZATION OF A(2) AND A(4) FOR 2ND ORDER INTEGRATION 
   10 A(2) = XDLTA/12.
      A(4) = Y1 
      RETURN
C 
C INITIALIZATION OF A(2) FOR 1ST ORDER INTEGRATION
   20 A(2) = XDLTA/2. 
      RETURN
      END 
      FUNCTION AREA(DATA,A) 
C "AREA" COMPUTES THE RUNNING NUMERIC INTEGRAL OF "DATA"
C EACH TIME AREA IS CALLED IT UPDATES ARRAY "A" AND COMPUTES
C THE NEW VALUE OF THE INTEGRAL.  TO AVOID ROUNDOFF ERROR, A(1) 
C SHOULD BE SET TO ZERO EVERY 1000 CALLS WHICH RESETS THE CURRENT 
C VALUE OF THE INTEGRAL.
      DIMENSION A(4)
C 
C IF A(2) < 0 THEN PERFORM 2ND ORDER INTEGRATION
      IF(A(2))10,20 
C 
C EVALUATION OF 2ND ORDER ALGORITHM 
   10 A(1) = A(1)-(5.*DATA+8.*A(3)-A(4))*A(2) 
C 
C  UPDATE PREVIOUS VALUE OF DATA
      A(4) = A(3) 
      GO TO 30
C 
C EVALUATION OF 1ST ORDER ALGORITHM 
   20 A(1) = A(1)+(A(3)+DATA)*A(2)
C 
C  UPDATE CURRENT VALUE OF DATA 
30    A(3) = DATA 
C  RETURN CURRENT VALUE OF INTEGRAL 
      AREA = A(1) 
      RETURN
      END 
      FUNCTION FAREA(Y,N,DX1) 
C  "FAREA" COMPUTES THE NUMERICAL INTEGRAL OF THE DATA POINTS 
C   IN ARRAY "Y".  THE ABSOLUTE VALUE OF "DX" IS THE INTEGRATION
C   STEP SIZE.  IF DX IS NEGATIVE THEN 2ND ORDER INTEGRATION IS 
C   PERFORMED INSTEAD OF 1ST ORDER. 
C   THE 1ST ORDER ALGORITHM IS TRAPEZOIDAL RULE INTEGRATION.
C   THE 2ND ORDER ALGORITHM IS SIMPSON'S RULE INTEGRATION WITH
C   A CORRECTION IN THE LAST INTERVAL IF AN EVEN NUMBER OF POINTS 
C   ARE GIVEN.
      DIMENSION Y(1)
      FAREA = 0.
      NM1 = N-1 
C 
C   DETERMINE IF 1ST OR 2ND ORDER INTEGRATION 
      IF(DX1)10,20
C 
C  EVALUATION OF 2ND ORDER ALGORITHM
   10 DX = DX1/(-3.)
      IFODD = 1 
      DO 12 I = 2,NM1 
      IFODD = -IFODD
      IF(IFODD)11,12
   11 FAREA = FAREA+Y(I)
   12 FAREA = FAREA+Y(I)
C 
C  IF AN EVEN NUMBER OF POINTS COMPUTE LAST INTERVAL CORRECTION 
      IF(IFODD)22,14
   14 FAREA = FAREA+Y(NM1)/2.+(Y(N)-Y(N-2))/8.
      GO TO 22
C 
C  EVALUATION OF 1ST ORDER ALGORITHM
   20 DO 21 I = 2,NM1 
   21 FAREA = FAREA+Y(I)
      DX = DX1/2. 
   22 FAREA = (Y+Y(N)+2.*FAREA)*DX
      RETURN
      END 
      END$
                                                              