Google
 

Trailing-Edge - PDP-10 Archives - decuslib20-02 - decus/20-0026/dacfi.ssp
There are 2 other files named dacfi.ssp in the archive. Click here to see a list.
C                                                                       DACF  10
C     ..................................................................DACF  20
C                                                                       DACF  30
C        SUBROUTINE DACFI                                               DACF  40
C                                                                       DACF  50
C        PURPOSE                                                        DACF  60
C           TO INTERPOLATE FUNCTION VALUE Y FOR A GIVEN ARGUMENT VALUE  DACF  70
C           X USING A GIVEN TABLE (ARG,VAL) OF ARGUMENT AND FUNCTION    DACF  80
C           VALUES.                                                     DACF  90
C                                                                       DACF 100
C        USAGE                                                          DACF 110
C           CALL DACFI (X,ARG,VAL,Y,NDIM,EPS,IER)                       DACF 120
C                                                                       DACF 130
C        DESCRIPTION OF PARAMETERS                                      DACF 140
C           X      - DOUBLE PRECISION ARGUMENT VALUE SPECIFIED BY INPUT.DACF 150
C           ARG    - DOUBLE PRECISION INPUT VECTOR (DIMENSION NDIM) OF  DACF 160
C                    ARGUMENT VALUES OF THE TABLE (POSSIBLY DESTROYED). DACF 170
C           VAL    - DOUBLE PRECISION INPUT VECTOR (DIMENSION NDIM) OF  DACF 180
C                    FUNCTION VALUES OF THE TABLE (DESTROYED).          DACF 190
C           Y      - RESULTING INTERPOLATED DOUBLE PRECISION FUNCTION   DACF 200
C                    VALUE.                                             DACF 210
C           NDIM   - AN INPUT VALUE WHICH SPECIFIES THE NUMBER OF       DACF 220
C                    POINTS IN TABLE (ARG,VAL).                         DACF 230
C           EPS    - SINGLE PRECISION INPUT CONSTANT WHICH IS USED AS   DACF 240
C                    UPPER BOUND FOR THE ABSOLUTE ERROR.                DACF 250
C           IER    - A RESULTING ERROR PARAMETER.                       DACF 260
C                                                                       DACF 270
C        REMARKS                                                        DACF 280
C           (1) TABLE (ARG,VAL) SHOULD REPRESENT A SINGLE-VALUED        DACF 290
C               FUNCTION AND SHOULD BE STORED IN SUCH A WAY, THAT THE   DACF 300
C               DISTANCES ABS(ARG(I)-X) INCREASE WITH INCREASING        DACF 310
C               SUBSCRIPT I. TO GENERATE THIS ORDER IN TABLE (ARG,VAL), DACF 320
C               SUBROUTINES DATSG, DATSM OR DATSE COULD BE USED IN A    DACF 330
C               PREVIOUS STAGE.                                         DACF 340
C           (2) NO ACTION BESIDES ERROR MESSAGE IN CASE NDIM LESS       DACF 350
C               THAN 1.                                                 DACF 360
C           (3) INTERPOLATION IS TERMINATED EITHER IF THE DIFFERENCE    DACF 370
C               BETWEEN TWO SUCCESSIVE INTERPOLATED VALUES IS           DACF 380
C               ABSOLUTELY LESS THAN TOLERANCE EPS, OR IF THE ABSOLUTE  DACF 390
C               VALUE OF THIS DIFFERENCE STOPS DIMINISHING, OR AFTER    DACF 400
C               (NDIM-1) STEPS (THE NUMBER OF POSSIBLE STEPS IS         DACF 410
C               DIMINISHED IF AT ANY STAGE INFINITY ELEMENT APPEARS IN  DACF 420
C               THE DOWNWARD DIAGONAL OF INVERTED-DIFFERENCES-SCHEME    DACF 430
C               AND IF IT IS IMPOSSIBLE TO ELIMINATE THIS INFINITY      DACF 440
C               ELEMENT BY INTERCHANGING OF TABLE POINTS).              DACF 450
C               FURTHER IT IS TERMINATED IF THE PROCEDURE DISCOVERS TWO DACF 460
C               ARGUMENT VALUES IN VECTOR ARG WHICH ARE IDENTICAL.      DACF 470
C               DEPENDENT ON THESE FOUR CASES, ERROR PARAMETER IER IS   DACF 480
C               CODED IN THE FOLLOWING FORM                             DACF 490
C                IER=0 - IT WAS POSSIBLE TO REACH THE REQUIRED          DACF 500
C                        ACCURACY (NO ERROR).                           DACF 510
C                IER=1 - IT WAS IMPOSSIBLE TO REACH THE REQUIRED        DACF 520
C                        ACCURACY BECAUSE OF ROUNDING ERRORS.           DACF 530
C                IER=2 - IT WAS IMPOSSIBLE TO CHECK ACCURACY BECAUSE    DACF 540
C                        NDIM IS LESS THAN 2, OR THE REQUIRED ACCURACY  DACF 550
C                        COULD NOT BE REACHED BY MEANS OF THE GIVEN     DACF 560
C                        TABLE. NDIM SHOULD BE INCREASED.               DACF 570
C                IER=3 - THE PROCEDURE DISCOVERED TWO ARGUMENT VALUES   DACF 580
C                        IN VECTOR ARG WHICH ARE IDENTICAL.             DACF 590
C                                                                       DACF 600
C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED                  DACF 610
C           NONE                                                        DACF 620
C                                                                       DACF 630
C        METHOD                                                         DACF 640
C           INTERPOLATION IS DONE BY CONTINUED FRACTIONS AND INVERTED-  DACF 650
C           DIFFERENCES-SCHEME. ON RETURN Y CONTAINS AN INTERPOLATED    DACF 660
C           FUNCTION VALUE AT POINT X, WHICH IS IN THE SENSE OF REMARK  DACF 670
C           (3) OPTIMAL WITH RESPECT TO GIVEN TABLE. FOR REFERENCE, SEE DACF 680
C           F.B.HILDEBRAND, INTRODUCTION TO NUMERICAL ANALYSIS,         DACF 690
C           MCGRAW-HILL, NEW YORK/TORONTO/LONDON, 1956, PP.395-406.     DACF 700
C                                                                       DACF 710
C     ..................................................................DACF 720
C                                                                       DACF 730
      SUBROUTINE DACFI(X,ARG,VAL,Y,NDIM,EPS,IER)                        DACF 740
C                                                                       DACF 750
C                                                                       DACF 760
      DIMENSION ARG(1),VAL(1)                                           DACF 770
      DOUBLE PRECISION ARG,VAL,X,Y,Z,P1,P2,P3,Q1,Q2,Q3,AUX,H            DACF 780
      IER=2                                                             DACF 790
      IF(NDIM)20,20,1                                                   DACF 800
    1 Y=VAL(1)                                                          DACF 810
      DELT2=0.                                                          DACF 820
      IF(NDIM-1)20,20,2                                                 DACF 830
C                                                                       DACF 840
C     PREPARATIONS FOR INTERPOLATION LOOP                               DACF 850
    2 P2=1.D0                                                           DACF 860
      P3=Y                                                              DACF 870
      Q2=0.D0                                                           DACF 880
      Q3=1.D0                                                           DACF 890
C                                                                       DACF 900
C                                                                       DACF 910
C     START INTERPOLATION LOOP                                          DACF 920
      DO 16 I=2,NDIM                                                    DACF 930
      II=0                                                              DACF 940
      P1=P2                                                             DACF 950
      P2=P3                                                             DACF 960
      Q1=Q2                                                             DACF 970
      Q2=Q3                                                             DACF 980
      Z=Y                                                               DACF 990
      DELT1=DELT2                                                       DACF1000
      JEND=I-1                                                          DACF1010
C                                                                       DACF1020
C     COMPUTATION OF INVERTED DIFFERENCES                               DACF1030
    3 AUX=VAL(I)                                                        DACF1040
      DO 10 J=1,JEND                                                    DACF1050
      H=VAL(I)-VAL(J)                                                   DACF1060
      IF(DABS(H)-1.D-13*DABS(VAL(I)))4,4,9                              DACF1070
    4 IF(ARG(I)-ARG(J))5,17,5                                           DACF1080
    5 IF(J-JEND)8,6,6                                                   DACF1090
C                                                                       DACF1100
C     INTERCHANGE ROW I WITH ROW I+II                                   DACF1110
    6 II=II+1                                                           DACF1120
      III=I+II                                                          DACF1130
      IF(III-NDIM)7,7,19                                                DACF1140
    7 VAL(I)=VAL(III)                                                   DACF1150
      VAL(III)=AUX                                                      DACF1160
      AUX=ARG(I)                                                        DACF1170
      ARG(I)=ARG(III)                                                   DACF1180
      ARG(III)=AUX                                                      DACF1190
      GOTO 3                                                            DACF1200
C                                                                       DACF1210
C     COMPUTATION OF VAL(I) IN CASE VAL(I)=VAL(J) AND J LESS THAN I-1   DACF1220
    8 VAL(I)=1.7D38                                                      DACF1230
      GOTO 10                                                           DACF1240
C                                                                       DACF1250
C     COMPUTATION OF VAL(I) IN CASE VAL(I) NOT EQUAL TO VAL(J)          DACF1260
    9 VAL(I)=(ARG(I)-ARG(J))/H                                          DACF1270
   10 CONTINUE                                                          DACF1280
C     INVERTED DIFFERENCES ARE COMPUTED                                 DACF1290
C                                                                       DACF1300
C     COMPUTATION OF NEW Y                                              DACF1310
      P3=VAL(I)*P2+(X-ARG(I-1))*P1                                      DACF1320
      Q3=VAL(I)*Q2+(X-ARG(I-1))*Q1                                      DACF1330
      IF(Q3)11,12,11                                                    DACF1340
   11 Y=P3/Q3                                                           DACF1350
      GOTO 13                                                           DACF1360
   12 Y=1.7D38                                                           DACF1370
   13 DELT2=DABS(Z-Y)                                                   DACF1380
      IF(DELT2-EPS)19,19,14                                             DACF1390
   14 IF(I-10)16,15,15                                                  DACF1400
   15 IF(DELT2-DELT1)16,18,18                                           DACF1410
   16 CONTINUE                                                          DACF1420
C     END OF INTERPOLATION LOOP                                         DACF1430
C                                                                       DACF1440
C                                                                       DACF1450
      RETURN                                                            DACF1460
C                                                                       DACF1470
C     THERE ARE TWO IDENTICAL ARGUMENT VALUES IN VECTOR ARG             DACF1480
   17 IER=3                                                             DACF1490
      RETURN                                                            DACF1500
C                                                                       DACF1510
C     TEST VALUE DELT2 STARTS OSCILLATING                               DACF1520
   18 Y=Z                                                               DACF1530
      IER=1                                                             DACF1540
      RETURN                                                            DACF1550
C                                                                       DACF1560
C     THERE IS SATISFACTORY ACCURACY WITHIN NDIM-1 STEPS                DACF1570
   19 IER=0                                                             DACF1580
   20 RETURN                                                            DACF1590
      END                                                               DACF1600