Google
 

Trailing-Edge - PDP-10 Archives - decus_20tap2_198111 - decus/20-0026/dhpcl.ssp
There are 2 other files named dhpcl.ssp in the archive. Click here to see a list.
C                                                                       DHCL  10
C     ..................................................................DHCL  20
C                                                                       DHCL  30
C        SUBROUTINE DHPCL                                               DHCL  40
C                                                                       DHCL  50
C        PURPOSE                                                        DHCL  60
C           TO SOLVE A SYSTEM OF FIRST ORDER ORDINARY LINEAR            DHCL  70
C           DIFFERENTIAL EQUATIONS WITH GIVEN INITIAL VALUES.           DHCL  80
C                                                                       DHCL  90
C        USAGE                                                          DHCL 100
C           CALL DHPCL (PRMT,Y,DERY,NDIM,IHLF,AFCT,FCT,OUTP,AUX,A)      DHCL 110
C           PARAMETERS AFCT,FCT AND OUTP REQUIRE AN EXTERNAL STATEMENT. DHCL 120
C                                                                       DHCL 130
C        DESCRIPTION OF PARAMETERS                                      DHCL 140
C           PRMT   - DOUBLE PRECISION INPUT AND OUTPUT VECTOR WITH      DHCL 150
C                    DIMENSION GREATER THAN OR EQUAL TO 5, WHICH        DHCL 160
C                    SPECIFIES THE PARAMETERS OF THE INTERVAL AND OF    DHCL 170
C                    ACCURACY AND WHICH SERVES FOR COMMUNICATION BETWEENDHCL 180
C                    OUTPUT SUBROUTINE (FURNISHED BY THE USER) AND      DHCL 190
C                    SUBROUTINE DHPCL. EXCEPT PRMT(5) THE COMPONENTS    DHCL 200
C                    ARE NOT DESTROYED BY SUBROUTINE DHPCL AND THEY ARE DHCL 210
C           PRMT(1)- LOWER BOUND OF THE INTERVAL (INPUT),               DHCL 220
C           PRMT(2)- UPPER BOUND OF THE INTERVAL (INPUT),               DHCL 230
C           PRMT(3)- INITIAL INCREMENT OF THE INDEPENDENT VARIABLE      DHCL 240
C                    (INPUT),                                           DHCL 250
C           PRMT(4)- UPPER ERROR BOUND (INPUT). IF ABSOLUTE ERROR IS    DHCL 260
C                    GREATER THAN PRMT(4), INCREMENT GETS HALVED.       DHCL 270
C                    IF INCREMENT IS LESS THAN PRMT(3) AND ABSOLUTE     DHCL 280
C                    ERROR LESS THAN PRMT(4)/50, INCREMENT GETS DOUBLED.DHCL 290
C                    THE USER MAY CHANGE PRMT(4) BY MEANS OF HIS        DHCL 300
C                    OUTPUT SUBROUTINE.                                 DHCL 310
C           PRMT(5)- NO INPUT PARAMETER. SUBROUTINE DHPCL INITIALIZES   DHCL 320
C                    PRMT(5)=0. IF THE USER WANTS TO TERMINATE          DHCL 330
C                    SUBROUTINE DHPCL AT ANY OUTPUT POINT, HE HAS TO    DHCL 340
C                    CHANGE PRMT(5) TO NON-ZERO BY MEANS OF SUBROUTINE  DHCL 350
C                    OUTP. FURTHER COMPONENTS OF VECTOR PRMT ARE        DHCL 360
C                    FEASIBLE IF ITS DIMENSION IS DEFINED GREATER       DHCL 370
C                    THAN 5. HOWEVER SUBROUTINE DHPCL DOES NOT REQUIRE  DHCL 380
C                    AND CHANGE THEM. NEVERTHELESS THEY MAY BE USEFUL   DHCL 390
C                    FOR HANDING RESULT VALUES TO THE MAIN PROGRAM      DHCL 400
C                    (CALLING DHPCL) WHICH ARE OBTAINED BY SPECIAL      DHCL 410
C                    MANIPULATIONS WITH OUTPUT DATA IN SUBROUTINE OUTP. DHCL 420
C           Y      - DOUBLE PRECISION INPUT VECTOR OF INITIAL VALUES    DHCL 430
C                    (DESTROYED). LATERON Y IS THE RESULTING VECTOR OF  DHCL 440
C                    DEPENDENT VARIABLES COMPUTED AT INTERMEDIATE       DHCL 450
C                    POINTS X.                                          DHCL 460
C           DERY   - DOUBLE PRECISION INPUT VECTOR OF ERROR WEIGHTS     DHCL 470
C                    (DESTROYED). THE SUM OF ITS COMPONENTS MUST BE     DHCL 480
C                    EQUAL TO 1. LATERON DERY IS THE VECTOR OF          DHCL 490
C                    DERIVATIVES, WHICH BELONG TO FUNCTION VALUES Y AT  DHCL 500
C                    INTERMEDIATE POINTS X.                             DHCL 510
C           NDIM   - AN INPUT VALUE, WHICH SPECIFIES THE NUMBER OF      DHCL 520
C                    EQUATIONS IN THE SYSTEM.                           DHCL 530
C           IHLF   - AN OUTPUT VALUE, WHICH SPECIFIES THE NUMBER OF     DHCL 540
C                    BISECTIONS OF THE INITIAL INCREMENT. IF IHLF GETS  DHCL 550
C                    GREATER THAN 10, SUBROUTINE DHPCL RETURNS WITH     DHCL 560
C                    ERROR MESSAGE IHLF=11 INTO MAIN PROGRAM.           DHCL 570
C                    ERROR MESSAGE IHLF=12 OR IHLF=13 APPEARS IN CASE   DHCL 580
C                    PRMT(3)=0 OR IN CASE SIGN(PRMT(3)).NE.SIGN(PRMT(2)-DHCL 590
C                    PRMT(1)) RESPECTIVELY.                             DHCL 600
C           AFCT   - THE NAME OF AN EXTERNAL SUBROUTINE USED. IT        DHCL 610
C                    COMPUTES MATRIX A (FACTOR OF VECTOR Y ON THE       DHCL 620
C                    RIGHT HAND SIDE OF THE SYSTEM) FOR A GIVEN X-VALUE.DHCL 630
C                    ITS PARAMETER LIST MUST BE X,A. THE SUBROUTINE     DHCL 640
C                    SHOULD NOT DESTROY X.                              DHCL 650
C           FCT    - THE NAME OF AN EXTERNAL SUBROUTINE USED. IT        DHCL 660
C                    COMPUTES VECTOR F (INHOMOGENEOUS PART OF THE       DHCL 670
C                    RIGHT HAND SIDE OF THE SYSTEM) FOR A GIVEN X-VALUE.DHCL 680
C                    ITS PARAMETER LIST MUST BE X,F. THE SUBROUTINE     DHCL 690
C                    SHOULD NOT DESTROY X.                              DHCL 700
C           OUTP   - THE NAME OF AN EXTERNAL OUTPUT SUBROUTINE USED.    DHCL 710
C                    ITS PARAMETER LIST MUST BE X,Y,DERY,IHLF,NDIM,PRMT.DHCL 720
C                    NONE OF THESE PARAMETERS (EXCEPT, IF NECESSARY,    DHCL 730
C                    PRMT(4),PRMT(5),...) SHOULD BE CHANGED BY          DHCL 740
C                    SUBROUTINE OUTP. IF PRMT(5) IS CHANGED TO NON-ZERO,DHCL 750
C                    SUBROUTINE DHPCL IS TERMINATED.                    DHCL 760
C           AUX    - DOUBLE PRECISION AUXILIARY STORAGE ARRAY WITH 16   DHCL 770
C                    ROWS AND NDIM COLUMNS.                             DHCL 780
C           A      - DOUBLE PRECISION NDIM BY NDIM MATRIX, WHICH IS USEDDHCL 790
C                    AS AUXILIARY STORAGE ARRAY.                        DHCL 800
C                                                                       DHCL 810
C        REMARKS                                                        DHCL 820
C           THE PROCEDURE TERMINATES AND RETURNS TO CALLING PROGRAM, IF DHCL 830
C           (1) MORE THAN 10 BISECTIONS OF THE INITIAL INCREMENT ARE    DHCL 840
C               NECESSARY TO GET SATISFACTORY ACCURACY (ERROR MESSAGE   DHCL 850
C               IHLF=11),                                               DHCL 860
C           (2) INITIAL INCREMENT IS EQUAL TO 0 OR HAS WRONG SIGN       DHCL 870
C               (ERROR MESSAGES IHLF=12 OR IHLF=13),                    DHCL 880
C           (3) THE WHOLE INTEGRATION INTERVAL IS WORKED THROUGH,       DHCL 890
C           (4) SUBROUTINE OUTP HAS CHANGED PRMT(5) TO NON-ZERO.        DHCL 900
C                                                                       DHCL 910
C        SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED                  DHCL 920
C           THE EXTERNAL SUBROUTINES AFCT(X,A), FCT(X,F) AND            DHCL 930
C           OUTP(X,Y,DERY,IHLF,NDIM,PRMT) MUST BE FURNISHED BY THE USER.DHCL 940
C                                                                       DHCL 950
C        METHOD                                                         DHCL 960
C           EVALUATION IS DONE BY MEANS OF HAMMINGS MODIFIED PREDICTOR- DHCL 970
C           CORRECTOR METHOD. IT IS A FOURTH ORDER METHOD, USING 4      DHCL 980
C           PRECEEDING POINTS FOR COMPUTATION OF A NEW VECTOR Y OF THE  DHCL 990
C           DEPENDENT VARIABLES.                                        DHCL1000
C           FOURTH ORDER RUNGE-KUTTA METHOD SUGGESTED BY RALSTON IS     DHCL1010
C           USED FOR ADJUSTMENT OF THE INITIAL INCREMENT AND FOR        DHCL1020
C           COMPUTATION OF STARTING VALUES.                             DHCL1030
C           SUBROUTINE DHPCL AUTOMATICALLY ADJUSTS THE INCREMENT DURING DHCL1040
C           THE WHOLE COMPUTATION BY HALVING OR DOUBLING.               DHCL1050
C           TO GET FULL FLEXIBILITY IN OUTPUT, AN OUTPUT SUBROUTINE     DHCL1060
C           MUST BE CODED BY THE USER.                                  DHCL1070
C           FOR REFERENCE, SEE                                          DHCL1080
C           (1)  RALSTON/WILF, MATHEMATICAL METHODS FOR DIGITAL         DHCL1090
C                COMPUTERS, WILEY, NEW YORK/LONDON, 1960, PP.95-109.    DHCL1100
C           (2)  RALSTON, RUNGE-KUTTA METHODS WITH MINIMUM ERROR BOUNDS,DHCL1110
C                MTAC, VOL.16, ISS.80 (1962), PP.431-437.               DHCL1120
C                                                                       DHCL1130
C     ..................................................................DHCL1140
C                                                                       DHCL1150
      SUBROUTINE DHPCL(PRMT,Y,DERY,NDIM,IHLF,AFCT,FCT,OUTP,AUX,A)       DHCL1160
C                                                                       DHCL1170
C                                                                       DHCL1180
C     THE FOLLOWING FIRST PART OF SUBROUTINE DHPCL (UNTIL FIRST BREAK-  DHCL1190
C     POINT FOR LINKAGE) HAS TO STAY IN CORE DURING THE WHOLE           DHCL1200
C     COMPUTATION                                                       DHCL1210
C                                                                       DHCL1220
      DIMENSION PRMT(1),Y(1),DERY(1),AUX(16,1),A(1)                     DHCL1230
      DOUBLE PRECISION PRMT,Y,DERY,AUX,X,H,Z,DELT,A,HS                  DHCL1240
      GOTO 100                                                          DHCL1250
C                                                                       DHCL1260
C     THIS PART OF SUBROUTINE DHPCL COMPUTES THE RIGHT HAND SIDE DERY OFDHCL1270
C     THE GIVEN SYSTEM OF LINEAR DIFFERENTIAL EQUATIONS.                DHCL1280
    1 CALL AFCT(X,A)                                                    DHCL1290
      CALL FCT(X,DERY)                                                  DHCL1300
      DO 3 M=1,NDIM                                                     DHCL1310
      LL=M-NDIM                                                         DHCL1320
      HS=0.D0                                                           DHCL1330
      DO 2 L=1,NDIM                                                     DHCL1340
      LL=LL+NDIM                                                        DHCL1350
    2 HS=HS+A(LL)*Y(L)                                                  DHCL1360
    3 DERY(M)=HS+DERY(M)                                                DHCL1370
      GOTO(105,202,204,206,115,122,125,308,312,327,329,128),ISW2        DHCL1380
C                                                                       DHCL1390
C     POSSIBLE BREAK-POINT FOR LINKAGE                                  DHCL1400
C                                                                       DHCL1410
  100 N=1                                                               DHCL1420
      IHLF=0                                                            DHCL1430
      X=PRMT(1)                                                         DHCL1440
      H=PRMT(3)                                                         DHCL1450
      PRMT(5)=0.D0                                                      DHCL1460
      DO 101 I=1,NDIM                                                   DHCL1470
      AUX(16,I)=0.D0                                                    DHCL1480
      AUX(15,I)=DERY(I)                                                 DHCL1490
  101 AUX(1,I)=Y(I)                                                     DHCL1500
      IF(H*(PRMT(2)-X))103,102,104                                      DHCL1510
C                                                                       DHCL1520
C     ERROR RETURNS                                                     DHCL1530
  102 IHLF=12                                                           DHCL1540
      GOTO 104                                                          DHCL1550
  103 IHLF=13                                                           DHCL1560
C                                                                       DHCL1570
C     COMPUTATION OF DERY FOR STARTING VALUES                           DHCL1580
  104 ISW2=1                                                            DHCL1590
      GOTO 1                                                            DHCL1600
C                                                                       DHCL1610
C     RECORDING OF STARTING VALUES                                      DHCL1620
  105 CALL OUTP(X,Y,DERY,IHLF,NDIM,PRMT)                                DHCL1630
      IF(PRMT(5))107,106,107                                            DHCL1640
  106 IF(IHLF)108,108,107                                               DHCL1650
  107 RETURN                                                            DHCL1660
  108 DO 109 I=1,NDIM                                                   DHCL1670
C                                                                       DHCL1680
  109 AUX(8,I)=DERY(I)                                                  DHCL1690
C     COMPUTATION OF AUX(2,I)                                           DHCL1700
      ISW1=1                                                            DHCL1710
      GOTO 200                                                          DHCL1720
  110 X=X+H                                                             DHCL1730
      DO 111 I=1,NDIM                                                   DHCL1740
  111 AUX(2,I)=Y(I)                                                     DHCL1750
C                                                                       DHCL1760
C     INCREMENT H IS TESTED BY MEANS OF BISECTION                       DHCL1770
  112 IHLF=IHLF+1                                                       DHCL1780
      X=X-H                                                             DHCL1790
      DO 113 I=1,NDIM                                                   DHCL1800
  113 AUX(4,I)=AUX(2,I)                                                 DHCL1810
      H=.5D0*H                                                          DHCL1820
      N=1                                                               DHCL1830
      ISW1=2                                                            DHCL1840
      GOTO 200                                                          DHCL1850
C                                                                       DHCL1860
  114 X=X+H                                                             DHCL1870
      ISW2=5                                                            DHCL1880
      GOTO 1                                                            DHCL1890
  115 N=2                                                               DHCL1900
      DO 116 I=1,NDIM                                                   DHCL1910
      AUX(2,I)=Y(I)                                                     DHCL1920
  116 AUX(9,I)=DERY(I)                                                  DHCL1930
      ISW1=3                                                            DHCL1940
      GOTO 200                                                          DHCL1950
C                                                                       DHCL1960
C     COMPUTATION OF TEST VALUE DELT                                    DHCL1970
  117 DELT=0.D0                                                         DHCL1980
      DO 118 I=1,NDIM                                                   DHCL1990
  118 DELT=DELT+AUX(15,I)*DABS(Y(I)-AUX(4,I))                           DHCL2000
      DELT=.066666666666666667D0*DELT                                   DHCL2010
      IF(DELT-PRMT(4))121,121,119                                       DHCL2020
  119 IF(IHLF-10)112,120,120                                            DHCL2030
C                                                                       DHCL2040
C     NO SATISFACTORY ACCURACY AFTER 10 BISECTIONS. ERROR MESSAGE.      DHCL2050
  120 IHLF=11                                                           DHCL2060
      X=X+H                                                             DHCL2070
      GOTO 104                                                          DHCL2080
C                                                                       DHCL2090
C     SATISFACTORY ACCURACY AFTER LESS THAN 11 BISECTIONS               DHCL2100
  121 X=X+H                                                             DHCL2110
      ISW2=6                                                            DHCL2120
      GOTO 1                                                            DHCL2130
  122 DO 123 I=1,NDIM                                                   DHCL2140
      AUX(3,I)=Y(I)                                                     DHCL2150
  123 AUX(10,I)=DERY(I)                                                 DHCL2160
      N=3                                                               DHCL2170
      ISW1=4                                                            DHCL2180
      GOTO 200                                                          DHCL2190
C                                                                       DHCL2200
  124 N=1                                                               DHCL2210
      X=X+H                                                             DHCL2220
      ISW2=7                                                            DHCL2230
      GOTO 1                                                            DHCL2240
  125 X=PRMT(1)                                                         DHCL2250
      DO 126 I=1,NDIM                                                   DHCL2260
      AUX(11,I)=DERY(I)                                                 DHCL2270
  1260Y(I)=AUX(1,I)+H*(.375D0*AUX(8,I)+.7916666666666667D0*AUX(9,I)     DHCL2280
     1-.20833333333333333D0*AUX(10,I)+.041666666666666667D0*DERY(I))    DHCL2290
  127 X=X+H                                                             DHCL2300
      N=N+1                                                             DHCL2310
      ISW2=12                                                           DHCL2320
      GOTO 1                                                            DHCL2330
  128 CALL OUTP(X,Y,DERY,IHLF,NDIM,PRMT)                                DHCL2340
      IF(PRMT(5))107,129,107                                            DHCL2350
  129 IF(N-4)130,300,300                                                DHCL2360
  130 DO 131 I=1,NDIM                                                   DHCL2370
      AUX(N,I)=Y(I)                                                     DHCL2380
  131 AUX(N+7,I)=DERY(I)                                                DHCL2390
      IF(N-3)132,134,300                                                DHCL2400
C                                                                       DHCL2410
  132 DO 133 I=1,NDIM                                                   DHCL2420
      DELT=AUX(9,I)+AUX(9,I)                                            DHCL2430
      DELT=DELT+DELT                                                    DHCL2440
  133 Y(I)=AUX(1,I)+.33333333333333333D0*H*(AUX(8,I)+DELT+AUX(10,I))    DHCL2450
      GOTO 127                                                          DHCL2460
C                                                                       DHCL2470
  134 DO 135 I=1,NDIM                                                   DHCL2480
      DELT=AUX(9,I)+AUX(10,I)                                           DHCL2490
      DELT=DELT+DELT+DELT                                               DHCL2500
  135 Y(I)=AUX(1,I)+.375D0*H*(AUX(8,I)+DELT+AUX(11,I))                  DHCL2510
      GOTO 127                                                          DHCL2520
C                                                                       DHCL2530
C     THE FOLLOWING PART OF SUBROUTINE DHPCL COMPUTES BY MEANS OF       DHCL2540
C     RUNGE-KUTTA METHOD STARTING VALUES FOR THE NOT SELF-STARTING      DHCL2550
C     PREDICTOR-CORRECTOR METHOD.                                       DHCL2560
  200 Z=X                                                               DHCL2570
      DO 201 I=1,NDIM                                                   DHCL2580
      X=H*AUX(N+7,I)                                                    DHCL2590
      AUX(5,I)=X                                                        DHCL2600
  201 Y(I)=AUX(N,I)+.4D0*X                                              DHCL2610
C     X IS AN AUXILIARY STORAGE LOCATION                                DHCL2620
C                                                                       DHCL2630
      X=Z+.4D0*H                                                        DHCL2640
      ISW2=2                                                            DHCL2650
      GOTO 1                                                            DHCL2660
  202 DO 203 I=1,NDIM                                                   DHCL2670
      X=H*DERY(I)                                                       DHCL2680
      AUX(6,I)=X                                                        DHCL2690
  203 Y(I)=AUX(N,I)+.29697760924775360D0*AUX(5,I)+.15875964497103583D0*XDHCL2700
C                                                                       DHCL2710
      X=Z+.45573725421878943D0*H                                        DHCL2720
      ISW2=3                                                            DHCL2730
      GOTO 1                                                            DHCL2740
  204 DO 205 I=1,NDIM                                                   DHCL2750
      X=H*DERY(I)                                                       DHCL2760
      AUX(7,I)=X                                                        DHCL2770
  205 Y(I)=AUX(N,I)+.21810038822592047D0*AUX(5,I)-3.0509651486929308D0* DHCL2780
     1AUX(6,I)+3.8328647604670103D0*X                                   DHCL2790
C                                                                       DHCL2800
      X=Z+H                                                             DHCL2810
      ISW2=4                                                            DHCL2820
      GOTO 1                                                            DHCL2830
  206 DO 207 I=1,NDIM                                                   DHCL2840
  2070Y(I)=AUX(N,I)+.17476028226269037D0*AUX(5,I)-.55148066287873294D0* DHCL2850
     1AUX(6,I)+1.2055355993965235D0*AUX(7,I)+.17118478121951903D0*      DHCL2860
     2H*DERY(I)                                                         DHCL2870
      X=Z                                                               DHCL2880
      GOTO(110,114,117,124),ISW1                                        DHCL2890
C                                                                       DHCL2900
C     POSSIBLE BREAK-POINT FOR LINKAGE                                  DHCL2910
C                                                                       DHCL2920
C     STARTING VALUES ARE COMPUTED.                                     DHCL2930
C     NOW START HAMMINGS MODIFIED PREDICTOR-CORRECTOR METHOD.           DHCL2940
  300 ISTEP=3                                                           DHCL2950
  301 IF(N-8)304,302,304                                                DHCL2960
C                                                                       DHCL2970
C     N=8 CAUSES THE ROWS OF AUX TO CHANGE THEIR STORAGE LOCATIONS      DHCL2980
  302 DO 303 N=2,7                                                      DHCL2990
      DO 303 I=1,NDIM                                                   DHCL3000
      AUX(N-1,I)=AUX(N,I)                                               DHCL3010
  303 AUX(N+6,I)=AUX(N+7,I)                                             DHCL3020
      N=7                                                               DHCL3030
C                                                                       DHCL3040
C     N LESS THAN 8 CAUSES N+1 TO GET N                                 DHCL3050
  304 N=N+1                                                             DHCL3060
C                                                                       DHCL3070
C     COMPUTATION OF NEXT VECTOR Y                                      DHCL3080
      DO 305 I=1,NDIM                                                   DHCL3090
      AUX(N-1,I)=Y(I)                                                   DHCL3100
  305 AUX(N+6,I)=DERY(I)                                                DHCL3110
      X=X+H                                                             DHCL3120
  306 ISTEP=ISTEP+1                                                     DHCL3130
      DO 307 I=1,NDIM                                                   DHCL3140
     0DELT=AUX(N-4,I)+1.3333333333333333D0*H*(AUX(N+6,I)+AUX(N+6,I)-    DHCL3150
     1AUX(N+5,I)+AUX(N+4,I)+AUX(N+4,I))                                 DHCL3160
      Y(I)=DELT-.9256198347107438D0*AUX(16,I)                           DHCL3170
  307 AUX(16,I)=DELT                                                    DHCL3180
C     PREDICTOR IS NOW GENERATED IN ROW 16 OF AUX, MODIFIED PREDICTOR   DHCL3190
C     IS GENERATED IN Y. DELT MEANS AN AUXILIARY STORAGE.               DHCL3200
      ISW2=8                                                            DHCL3210
      GOTO 1                                                            DHCL3220
C     DERIVATIVE OF MODIFIED PREDICTOR IS GENERATED IN DERY             DHCL3230
C                                                                       DHCL3240
  308 DO 309 I=1,NDIM                                                   DHCL3250
     0DELT=.125D0*(9.D0*AUX(N-1,I)-AUX(N-3,I)+3.D0*H*(DERY(I)+AUX(N+6,I)DHCL3260
     1+AUX(N+6,I)-AUX(N+5,I)))                                          DHCL3270
      AUX(16,I)=AUX(16,I)-DELT                                          DHCL3280
  309 Y(I)=DELT+.07438016528925620D0*AUX(16,I)                          DHCL3290
C                                                                       DHCL3300
C     TEST WHETHER H MUST BE HALVED OR DOUBLED                          DHCL3310
      DELT=0.D0                                                         DHCL3320
      DO 310 I=1,NDIM                                                   DHCL3330
  310 DELT=DELT+AUX(15,I)*DABS(AUX(16,I))                               DHCL3340
      IF(DELT-PRMT(4))311,324,324                                       DHCL3350
C                                                                       DHCL3360
C     H MUST NOT BE HALVED. THAT MEANS Y(I) ARE GOOD.                   DHCL3370
  311 ISW2=9                                                            DHCL3380
      GOTO 1                                                            DHCL3390
  312 CALL OUTP(X,Y,DERY,IHLF,NDIM,PRMT)                                DHCL3400
      IF(PRMT(5))314,313,314                                            DHCL3410
  313 IF(IHLF-11)315,314,314                                            DHCL3420
  314 RETURN                                                            DHCL3430
  315 IF(H*(X-PRMT(2)))316,314,314                                      DHCL3440
  316 IF(DABS(X-PRMT(2))-.1D0*DABS(H))314,317,317                       DHCL3450
  317 IF(DELT-.02D0*PRMT(4))318,318,301                                 DHCL3460
C                                                                       DHCL3470
C     H COULD BE DOUBLED IF ALL NECESSARY PRECEEDING VALUES ARE         DHCL3480
C     AVAILABLE                                                         DHCL3490
  318 IF(IHLF)301,301,319                                               DHCL3500
  319 IF(N-7)301,320,320                                                DHCL3510
  320 IF(ISTEP-4)301,321,321                                            DHCL3520
  321 IMOD=ISTEP/2                                                      DHCL3530
      IF(ISTEP-IMOD-IMOD)301,322,301                                    DHCL3540
  322 H=H+H                                                             DHCL3550
      IHLF=IHLF-1                                                       DHCL3560
      ISTEP=0                                                           DHCL3570
      DO 323 I=1,NDIM                                                   DHCL3580
      AUX(N-1,I)=AUX(N-2,I)                                             DHCL3590
      AUX(N-2,I)=AUX(N-4,I)                                             DHCL3600
      AUX(N-3,I)=AUX(N-6,I)                                             DHCL3610
      AUX(N+6,I)=AUX(N+5,I)                                             DHCL3620
      AUX(N+5,I)=AUX(N+3,I)                                             DHCL3630
      AUX(N+4,I)=AUX(N+1,I)                                             DHCL3640
      DELT=AUX(N+6,I)+AUX(N+5,I)                                        DHCL3650
      DELT=DELT+DELT+DELT                                               DHCL3660
  3230AUX(16,I)=8.962962962962963D0*(Y(I)-AUX(N-3,I))                   DHCL3670
     1-3.3611111111111111D0*H*(DERY(I)+DELT+AUX(N+4,I))                 DHCL3680
      GOTO 301                                                          DHCL3690
C                                                                       DHCL3700
C     H MUST BE HALVED                                                  DHCL3710
  324 IHLF=IHLF+1                                                       DHCL3720
      IF(IHLF-10)325,325,311                                            DHCL3730
  325 H=.5D0*H                                                          DHCL3740
      ISTEP=0                                                           DHCL3750
      DO 326 I=1,NDIM                                                   DHCL3760
     0Y(I)=.390625D-2*(8.D1*AUX(N-1,I)+135.D0*AUX(N-2,I)+4.D1*AUX(N-3,I)DHCL3770
     1+AUX(N-4,I))-.1171875D0*(AUX(N+6,I)-6.D0*AUX(N+5,I)-AUX(N+4,I))*H DHCL3780
     0AUX(N-4,I)=.390625D-2*(12.D0*AUX(N-1,I)+135.D0*AUX(N-2,I)+        DHCL3790
     1108.D0*AUX(N-3,I)+AUX(N-4,I))-.0234375D0*(AUX(N+6,I)+             DHCL3800
     218.D0*AUX(N+5,I)-9.D0*AUX(N+4,I))*H                               DHCL3810
      AUX(N-3,I)=AUX(N-2,I)                                             DHCL3820
  326 AUX(N+4,I)=AUX(N+5,I)                                             DHCL3830
      DELT=X-H                                                          DHCL3840
      X=DELT-(H+H)                                                      DHCL3850
      ISW2=10                                                           DHCL3860
      GOTO 1                                                            DHCL3870
  327 DO 328 I=1,NDIM                                                   DHCL3880
      AUX(N-2,I)=Y(I)                                                   DHCL3890
      AUX(N+5,I)=DERY(I)                                                DHCL3900
  328 Y(I)=AUX(N-4,I)                                                   DHCL3910
      X=X-(H+H)                                                         DHCL3920
      ISW2=11                                                           DHCL3930
      GOTO 1                                                            DHCL3940
  329 X=DELT                                                            DHCL3950
      DO 330 I=1,NDIM                                                   DHCL3960
      DELT=AUX(N+5,I)+AUX(N+4,I)                                        DHCL3970
      DELT=DELT+DELT+DELT                                               DHCL3980
     0AUX(16,I)=8.962962962962963D0*(AUX(N-1,I)-Y(I))                   DHCL3990
     1-3.3611111111111111D0*H*(AUX(N+6,I)+DELT+DERY(I))                 DHCL4000
  330 AUX(N+3,I)=DERY(I)                                                DHCL4010
      GOTO 306                                                          DHCL4020
      END                                                               DHCL4030