SUBROUTINE DMRODE(F, A, B, HMIN, H, HMAX, N, X0, WK, EPS, DMR 10 * JSTART, AA, TT, XX, ZZ, FINIT, ALPHA, WKA, IER, IQ) C C F -AUTOMATIC STEP CHANGE MERSON DIFFERENTIAL EQUATION C U - SOLVER MODIFIED TO HANDLE FUNCTIONAL DIFFERENTIAL C N - EQUATIONS OF THE FORM C C - (1) DX/DT =F(T,X,Z,I) C T - WHERE F (DESCRIBED BELOW) IS A VECTOR VALUED C I - FUNCTION OF DIMENSION N, X AND Z ARE C O - N VECTORS SUCH THAT THE ITH COMPONENT OF Z IS C N - THE ITH COMPONENT OF X EVALUATED AT ALPHA(X,T,I) C - ALPHA IS A VECTOR VALUED FUNCTION (DESCRIBED C - BELOW). ALPHA IS A USER SUPPLIED STATE DEPENDENT C - RETARDING FUNCTION, AND (1) IS CALLED A C - RETARDED ORDINARY DIFF. EQ. (RODE) WITH STATE C - DEPENDENT LAG (SDL). NOTE -AS WRITTEN ABOVE C - EACH COMPONENT OF DX/DT MAY DEPEND ON A DIFFERENT C - RETARDING FUNCTION. IT IS ALSO POSSIBLE TO ALLOW C - A GIVEN COMPONENT TO DEPEND ON MORE THAN ONE C - RETARDING FUNCTION BY AUGMENTING THE ORDER OF C - THE SYSTEM (SEE DISCRIPTION FOR DETAILS). C P F-USER SUPPLIED EXTERNAL FUNCTION. THE DERIVATIVE C A - OF THE ITH COMPONENT OF X IS F(T, X, Z,I), WHERE C R - Z AND X ARE ARRAYS OF DIMENSION N. X(I) C A - IS THE SOLUTION OF THE ITH COMPONENET AT T AND C M - Z (I) IS THE ITH COMPONENT OF X AT ALPHA(X,T,I) C E - Z(I) IS CALCULATED INTERNALLY WITHIN DMRODE AND C T - PASSED TO F (SEE ALPHA BELOW). T IS THE CURRENT C E - VALUE OF THE INDEPENDENT VARIABLE. C R A-STARTING POINT OF INTEGRATION C S B-FINAL POINT OF INTEGRATION (NOT NEC. .GT. A) C HMIN-THE ABSOLUTE VALUE OF MINIMUM ALLOWABLE STEP SIZE C - THE STEP SIZE WILL NEVER BE SMALLER THAN HMIN C - IN ABSOLUTE VALUE EXCEPT AT THE END OF THE C -INTERVAL WHERE H IS ALWAYS .GT. HMIN/2 IN ABS.. C H-INITIAL GUESS OF THE INTEGRATION STEP SIZE. THE C - ADJUSTED STEPSIZE IS RETURNED IN H. C HMAX-THE ABSOLUTE VALUE OF MAXIMUM ALLOWABLE STEP SIZE C N-NUMBER OF SIMULTANEOUS EQUATIONS C X0-VECTOR OF LENGTH N CONTAINING THE VALUE OF X(A). C - X(B) IS RETURNED IN X0. C WK-WORK AREA OF DIMENSION .GE. 4*N C EPS-INPUT REQUEST OF RELATIVE ERROR IN LARGEST COMP. C JSTART-A PARAMETER USED TO INTIALIZE Z ARRAY INTERNALLY C - IN DMRODE. JSTART MUST BE SET EQUAL TO ZERO ON C - FIRST CALL TO DMRODE. TO INTEGRATE BEYOND B AFTER C - FIRST CALL CERTAIN ARRAYS MUST BE SAVED. THIS C - IS DONE AUTOMATICALLY BY LETTING JSTART=1. C - IF JSTART=-1, THEN THE INITIAL CONDITIONS AT C - THE PREVIOUS CALL ARE REINSTATED AND THE INTE- C - GRATION FROM A TO POSSIBLY A NEW CHOICE FOR B C - CAN BE EXECUTED. THIS ALLOWS INTERATIVE USE OF C - DMRODE IN ORDER TO CALCULATE DERIVATIVE JUMP C - POINTS IN THE SOLUTION(SEE DESCRIPTION) C AA-A PARAMETER THAT MUST BE SET EQUAL TO THE VALUE OF C - THE STARTING POINT A WHEN FIRST CALL TO DMRODE C - WAS MADE (I.E. WHEN JSTART=0) (SEE FINIT) C TT-STORAGE ARRAY FOR SAVING TIME STEP VALUES C - TT IS OF DIMENSION IQ WHERE IQ IS .GT.LENGTH OF C - ENTIRE INTERVAL/HMIN C XX,ZZ-STORAGE ARRAYS OF DIMENSION N BY IQ USED FOR C - SAVING VALUES OF X AND Z DESCRIBED IN F. C FINIT-USER SUPPLIED EXTERNAL FUNCTION, FINIT(T,I). FINIT C - RETURNS THE VALUE OF THE ITH COMPONENT OF C - THE INITIAL FUNCTION AT T WHENEVER ((T. LE.AA) C - .AND.(H.GE.0)).OR.((T.GE.AA).AND.(H.LE.0)). C ALPHA-USER SUPPLIED EXTERNAL FUNCTION OF THE C - FORM ALPHA(X,T,I) WHERE X IS ASSUMED TO BE C - THE CURRENT SOLUTION (SUPPLIED BY DMRODE) AND C - T THE CURRENT TIME. IN GENERAL ALPHA WILL BE C - DIFFERENT FOR EACH COMPONENT X(I). IN THE EVENT C - A RODE IS POSED WITH MORE THAN ONE LAG IN ANY C - GIVEN COMPONENT THE SYSTEM MAY BE AUGMENTED TO C - HANDLE THIS SITUATION (SEE DISCRIPTION). C WKA-WORK AREA OF DIMENSION .GE.11*N UNLESS C - IT IS KNOWN THE LAG T-ALPHA(T,X(T),I) IN ALL C - COMPONENTS WILL ALWAYS EXCEED HMAX OR VANISH C - OVER THE ENTIRE INTERVAL IN A GIVEN COMPONENT, C - IN WHICH CASE A DIMENSION OF 3*N WILL SUFFICE C IER-OUTPUT PARAMETER IF IER=0 AND HMAX.NE.HMIN C - NORMAL ERROR CHECKING TOOK PLACE. IF IER=1 C - HMIN WAS ATTAINED BY THE STEP CHANGING C - PROCEDURE, HENCE REQUESTED ACCURACY IS NOT C - GUARANTEED C IQ-THE DIMENSION OF TT IN THE CALLING PROGRAM (ALSO C - THE DIMENSION OF THE 2ND ARGUMENT OF THE XX AND C - ZZ ARRAYS). C PRECISION - SINGLE C AUTHOR/IMPLEMENTOR- KENNETH W. NEVES C REQUIRED ROUTINES C - DZETA, AN INTERPOLATION SCHEME OF ORDER COMP- C - ARABLE TO 4TH ORDER MERSON METHOD. DZETA IN TURN C - WILL CALL STARTER METHOD WHEN LAG IS SMALLER C - THAN CURRENT STEP SIZE. C DIMENSION WK(1), X0(1) DIMENSION WKA(1) DIMENSION TT(1), XX(N,1), ZZ(N,1) EXTERNAL F, FINIT, ALPHA INTEGER SW LOGICAL BE, BH, BR, BX, BT DATA ZERO, P5, OP5, THREE, FOUR /0.,.5,1.5,3.,4./ E5 = .5*EPS IER = 0 IF (A.EQ.B) GO TO 290 IB1 = N + N IB2 = IB1 + N C ************************************ C CHECK FOR THE PROPER SIGN OF H C ************************************ H = SIGN(ABS(H),B-A) C ************************************ C CHECK FOR 1ST CALL TO DMRODE. IF C YES, THEN INITIALIZE NEC. ARRAYS C ************************************ IF (JSTART.NE.0) GO TO 20 JRAY = 1 JSAVE = JRAY TT(1) = A DO 10 J=1,N XX(J,1) = X0(J) ZZ(J,1)=DZETA(TT(1),X0,TT,XX,ZZ,AA,F,FINIT,ALPHA, * N,J,WKA(N+1),H,1,IQ) 10 CONTINUE 20 CONTINUE BH = .TRUE. BR = .TRUE. BX = .TRUE. BT = .TRUE. X = A XS = A IF (ABS(H).GE.HMAX) H = SIGN(1.,H)*HMAX DO 30 J=1,N IJK0 = N + J WK(IJK0) = X0(J) 30 CONTINUE C ************************************ C CHECK JSTART AND EXECUTE C PROPER INITIALIZATION C ************************************ IF (JSTART) 40, 90, 50 40 JRAY = JSAVE 50 DO 60 J=1,N IJK0 = N + J WK(IJK0) = XX(J,JRAY) 60 CONTINUE JSAVE = JRAY GO TO 90 70 XS = X C ************************************ C AFTER EACH SUCCESSFUL TIME STEP C UPDATE TT,XX,ZZ ARRAYS. CALL TO C DZETA PERFORMS NECESSARY INTERPO- C LATION AT LAG POINT. C ************************************ TT(JRAY+1) = X DO 80 J=1,N IJK0 = N + J WK(IJK0) = X0(J) XX(J,JRAY+1) = X0(J) HH = X - TT(JRAY) ZZ(J,JRAY+1) = DZETA(TT(JRAY+1),X0,TT,XX,ZZ,AA,F,FINIT, * ALPHA,N,J,WKA(N+1),HH,JRAY,IQ) 80 CONTINUE C ************************************ C INSERT CALL TO PRINT ROUTINE HERE C IF DESIRED. C ************************************ JRAY = JRAY + 1 IF (BR) GO TO 90 H = HSS RETURN 90 HSS = H C ************************************ C TEST FOR END OF PROBLEM C ************************************ Q = X + H - B BE = .TRUE. IF (.NOT.((H.GT.ZERO .AND. Q/H.GE.-.5) .OR. (H.LT.ZERO .AND. * Q/(-H).LE..5))) GO TO 110 IF (BT) HSS = H H = .5*(B-X) IF (.NOT.BT) H = B - X IF (BT) GO TO 100 BR = .FALSE. 100 BT = .FALSE. 110 CONTINUE H3 = H/THREE C ************************************ C CALCULATE SOLN. AT X+H C ************************************ DO 270 SW=1,5 C ************************************ C DZETA CALCULATES LAG AND SOLUTION C AT PAST POINT (NEC. FOR F ) C ************************************ DO 120 JS=1,N WKA(JS) = DZETA(X,X0,TT,XX,ZZ,AA,F,FINIT,ALPHA,N,JS, * WKA(N+1),H,JRAY,IQ) 120 CONTINUE DO 130 JS=1,N WK(JS) = F(X,X0,WKA,JS) 130 CONTINUE DO 230 I=1,N Q = H3*WK(I) IJK0 = N + I IJK1 = IB1 + I IJK2 = IB2 + I GO TO (140, 150, 160, 170, 180), SW 140 R = Q WK(IJK1) = Q GO TO 190 C 150 R = P5*(Q+WK(IJK1)) GO TO 190 C 160 R = THREE*Q WK(IJK2) = R R = .375*(R+WK(IJK1)) GO TO 190 C 170 R = WK(IJK1) + FOUR*Q WK(IJK1) = R R = OP5*(R-WK(IJK2)) GO TO 190 C 180 R = P5*(Q+WK(IJK1)) Q = ABS(R+R-OP5*(Q+WK(IJK2))) 190 X0(I) = WK(IJK0) + R IF (SW.NE.5) GO TO 230 C ************************************ C AUTOMATIC STEP CHANGE C ************************************ E = ABS(X0(I)) R = E5 IF (E.GE.1.E-3) R = E*E5 IF (HMIN.EQ.HMAX) GO TO 280 C ************************************ C TEST ADJUSTMENT OF THE STEP C ************************************ IF (Q.LT.R .OR. (.NOT.BX)) GO TO 220 BR = .TRUE. BT = .TRUE. BH = .FALSE. H = P5*H IF (ABS(H).GT.HMIN) GO TO 200 IF (.NOT.BR) GO TO 280 C ************************************ C THE STEP IS HALVED RESTORE X AND X0, C AND GO BACK FOR REPEATED INTEGRATION C WITH THIS NEW STEP C ************************************ H = SIGN(1.,H)*HMIN BX = .FALSE. IER = 1 200 DO 210 J=1,N IJK0 = N + J X0(J) = WK(IJK0) 210 CONTINUE X = XS GO TO 90 C 220 IF (Q.GE.0.03125*R) BE = .FALSE. 230 CONTINUE GO TO (240, 270, 250, 260, 270), SW 240 X = X + H3 GO TO 270 C 250 X = X + P5*H3 GO TO 270 C 260 X = X + P5*H 270 CONTINUE C ************************************ C TEST A POSSIBLE DOUBLING OF THE STEP C ************************************ IF (.NOT.(BE .AND. BH .AND. BR)) GO TO 280 H = H + H BX = .TRUE. 280 BH = .TRUE. GO TO 70 C 290 DO 300 I=1,N X0(I) = ZERO 300 CONTINUE RETURN END FUNCTION DZETA(TA, XA, T, X, XL, TAU, F, FINIT, ALPHA, N, DZE 10 * JCOMP, W, HP, JRAY, NN) C C F -INTERPOLATION ROUTINE. CALLED BY DMRODE AND C U - REQUIRES NO USER INTERFACE OTHER THAN USER C N - SUPPLIED EXTERNAL FUNCTION ALPHA (SEE DMRODE). C C - DZETA CALCULATES THE LAG(OR RETARDATION) VIA C T - ALPHA WITH TA,XA AS INPUT, THEN USES 2-POINT C I - HERMITE INTERPOLATION TO APPROXIMATE SOLUTION C O - AT LAG. IF STEP SIZE IS LARGER THAN LAG,HERMITE C N - INTERPOLANT CANNOT BE OBTAINED, SO DZETA CALLS C - A TRUE ONESTEP FDE SOLVER. SINCE DMRODE CALLS C - DZETA THE PARAMETER DESCRIPTION CAN BE FOUND C - IN DMRODE DIMENSION W(1), XA(1) DIMENSION T(1), X(N,1), XL(N,1) EXTERNAL F, FINIT, ALPHA DATA J /1/ IF ((J.GE.JRAY) .AND. (J.NE.1)) J = JRAY - 1 IF (J.LE.0) J = 1 C ************************************ C CALCULATE LAG C ************************************ B = ALPHA(XA,TA,JCOMP) IF (B.EQ.TA) DZETA = XA(JCOMP) IF (B.EQ.TA) RETURN IF (((HP.LT.0.) .AND. (B.GE.TAU)) .OR. ((HP.GE.0.) .AND. * (B.LE.TAU))) GO TO 100 C ************************************ C SEARCH T ARRAY IN ORDER TO FIND C INTERVAL CONTAINING ALPHA(XA,TA,I).. C IF NO SUCH INTERVAL IS FOUND CALL C START OR IF ARRAY EXCEEDS C DIMENSION IQ OF DMRODE, STOP C ************************************ DX = B - T(J) IF (HP.LT.0.) DX = -DX IF (DX) 10, 40, 30 10 IF (J.EQ.1) GO TO 40 J = J - 1 DX = B - T(J) IF (HP.LT.0.) DX = -DX IF (DX) 10, 40, 40 20 J = J + 1 30 IF (J.EQ.NN) GO TO 50 IF (J+1.GT.JRAY) GO TO 90 DDX = B - T(J+1) IF (HP.LT.0.) DDX = -DDX IF (DDX) 40, 20, 20 40 IF (J.EQ.NN) GO TO 50 GO TO 60 C 50 STOP 60 CONTINUE C ************************************ C 2-POINT HERMITE INTERPOLATION C ************************************ IF (T(J+1).GE.TA) GO TO 90 DX = T(J+1) - T(J) HH = B - T(J) DO 70 I=1,N II = I + N W(I) = X(I,J) W(II) = XL(I,J) 70 CONTINUE AC = F(T(J),W,W(N+1),JCOMP) DO 80 I=1,N II = I + N W(I) = X(I,J+1) W(II) = XL(I,J+1) 80 CONTINUE AF2P = F(T(J+1),W,W(N+1),JCOMP) DIVDF1 = (X(JCOMP,J+1)-X(JCOMP,J))/DX DIVDF3 = AC + AF2P - 2.*DIVDF1 C3 = (DIVDF1-AC-DIVDF3)/DX C4 = DIVDF3/DX**2 DZETA = X(JCOMP,J) + HH*(AC+HH*(C3+HH*C4)) GO TO 110 C 90 CONTINUE J = JRAY CALL START(TA, XA, T, X, XL, F, FINIT, ALPHA, N, JCOMP, W, J, * ANS, HP) DZETA = ANS RETURN C 100 DZETA = FINIT(B,JCOMP) 110 CONTINUE RETURN C C END SUBROUTINE START(TA, XA, T, X, XL, F, FINT, ALPHA, N, JCOMP, STA 10 * W, JEND, ANS, H1) C F -START IS A SUBROUTINE THAT CAN APPROXIMATE THE C U - SOLUTION AT A PAST POINT GIVEN ONLY THE SOLUTION C N - AT THE MOST RECENT MESH POINT AND THE FUNCTIONS C C - F AND ALPHA, AS DESCRIBED BY DMRODE. IT IS A C T - RUNGE-KUTTA TYPE ALGORITHM MODIFIED FOR RODES C I - AND IS GLOBALLY 3RD ORDER, BUT PREDICTS 4TH C O - ORDER APPROX. TO BE USED IN EVALUATION OF F C N - IN MERSON METHOD OF DMRODE. START, DZETA, AND C - DMRODE COMBINE TO GIVE 4TH ORDER SIMPLIFIED C - PREDICTOR-CORRECTOR TWO STEP ALGORITHM, WHERE C - START IS A TRUE ONE-STEP PREDICTOR USED ONLY C - WHEN STEP SIZE EXCEEDS THE LAG DIMENSION T(1), X(N,1), XL(N,1), XA(1), W(1) I1 = N I2 = I1 + N I3 = I2 + N I4 = I3 + N I5 = I4 + N I6 = I5 + N I7 = I6 + N I8 = I7 + N I9 = I8 + N JRAY = JEND C ************************************ C RECALCULATE LAG C ************************************ B = ALPHA(XA,TA,JCOMP) 10 TEST = B - T(JRAY) IF (H1.LT.0.) TEST = -TEST IF (TEST.GT.0.) GO TO 20 JRAY = JRAY - 1 GO TO 10 C ************************************ C CONSTRUCT EULER-TYPE PREDICTOR C CALCULATE APPROX. SOLN. AT TA+H C SEARCH FOR LAG CORRESPONDING TO C X(TA+H) JUST CALCULATED. C APPROXIMATE X AT LAG VIA EULER C ************************************ 20 CONTINUE H = H1 ISWITC = 1 IF (JRAY.NE.JEND) H = T(JRAY+1) - T(JRAY) DO 30 I=1,N L5 = I5 + I L6 = I6 + I W(L5) = X(I,JRAY) W(L6) = XL(I,JRAY) 30 CONTINUE DO 40 I=1,N L1 = I1 + I W(L1) = F(T(JRAY),W(I5+1),W(I6+1),I) 40 CONTINUE DO 50 I=1,N L5 = I5 + I L1 = I1 + I W(L5) = X(I,JRAY) + H*W(L1) C ************************************ C IN EACH COMPONENT CALCULATE THE C CORRESPONDING LAG,W(I), FOR THE C EULER PREDICTED VALUE W(L5), AND C EXECUTE SEARCH. C ************************************ 50 CONTINUE DO 90 I=1,N W(I) = ALPHA(W(I5+1),T(JRAY)+H,I) J = JRAY 60 TEST = W(I) - T(J) IF (H1.LT.0.) TEST = -TEST IF (TEST.GE.0.) GO TO 70 J = J - 1 IF (J.EQ.0) GO TO 70 GO TO 60 C 70 CONTINUE L9 = I9 + I W(L9) = J IF (J.EQ.0) GO TO 90 DO 80 II=1,N L3 = I3 + II L4 = I4 + II W(L3) = X(II,J) W(L4) = XL(II,J) 80 CONTINUE 90 CONTINUE DO 100 I=1,N L9 = I9 + I J = W(L9) H = H1 L6 = I6 + I IF (J.EQ.0) W(L6) = FINT(W(I),I) IF (J.EQ.0) GO TO 100 IF (J.NE.JEND) H = T(J+1) - T(J) C ************************************ C W(L6) IS THE SOLUTION AT ALPHA(W(I),T,I) C ************************************ W(L6) = X(I,J) + (W(I)-T(J))*F(T(J),W(I3+1),W(I4+1),I) 100 CONTINUE C ************************************ C REPEAT ENTIRE PROCEDURE ABOVE C USING EULER VALUE TO CALCULATE C HEUN-TYPE 2ND ORDER PREDICTOR C ************************************ DO 110 I=1,N L2 = I2 + I W(L2) = F(T(JRAY)+H,W(I5+1),W(I6+1),I) 110 CONTINUE DO 120 I=1,N L1 = I1 + I L2 = I2 + I L3 = I3 + I L7 = I7 + I C ************************************ C FOR EACH COMPONENT ESTIMATE THE C SOLUTION AT T+H AND T+H/2 AND STORE C ANSWERS IN W(L3) AND W(L7) RESP. C ************************************ W(L3) = X(I,JRAY) + H*W(L1) + .5*H*(W(L2)-W(L1)) W(L7) = X(I,JRAY) + .5*H*W(L1) + .125*H*(W(L2)-W(L1)) C ************************************ C IN STATEMENTS 120 THRU 280 THE COR- C RESPONDING LAGS AND THE SOLUTION AT C THESE LAGS ARE COMPUTED TO 2ND ORDER C BY HEUN METHOD AND STORED IN W(L4) AND C W(L8) RESPECTIVELY C ************************************ 120 CONTINUE DO 130 I=1,N W(I) = ALPHA(W(I3+1),T(JRAY)+H,I) 130 CONTINUE 140 DO 170 I=1,N J = JRAY 150 TEST = W(I) - T(J) IF (H1.LT.0.) TEST = -TEST IF (TEST.GE.0.) GO TO 160 J = J - 1 IF (J.EQ.0) GO TO 160 GO TO 150 C 160 CONTINUE L9 = I9 + I W(L9) = J 170 CONTINUE DO 290 I=1,N L9 = I9 + I J = W(L9) H = H1 IF (J.EQ.0) GO TO 250 IF (J.NE.JEND) H = T(J+1) - T(J) IF (J.EQ.JEND) GO TO 220 DO 180 II=1,N L5 = I5 + II L6 = I6 + II W(L5) = X(II,J) W(L6) = XL(II,J) 180 CONTINUE DO 190 II=1,N L1 = I1 + II W(L1) = F(T(J),W(I5+1),W(I6+1),II) 190 CONTINUE DO 200 II=1,N L5 = I5 + II L6 = I6 + II W(L5) = X(II,J+1) W(L6) = XL(II,J+1) 200 CONTINUE DO 210 II=1,N L2 = I2 + II W(L2) = F(T(J+1),W(I5+1),W(I6+1),II) 210 CONTINUE 220 GO TO (230, 240), ISWITC 230 L1 = I1 + I L2 = I2 + I L4 = I4 + I W(L4) = X(I,J) + (W(I)-T(J))*W(L1) + .5*(W(I)-T(J))**2* * (W(L2)-W(L1))/H GO TO 260 C 240 L1 = I1 + I L2 = I2 + I L8 = I8 + I W(L8) = X(I,J) + (W(I)-T(J))*W(L1) + .5*(W(I)-T(J))**2* * (W(L2)-W(L1))/H 250 CONTINUE L4 = I4 + I IF (ISWITC.EQ.1) W(L4) = FINT(W(I),I) L8 = I8 + I IF (ISWITC.EQ.2) W(L8) = FINT(W(I),I) GO TO 260 C 260 GO TO (270, 290), ISWITC 270 DO 280 II=1,N W(II) = ALPHA(W(I7+1),T(JRAY)+.5*H,II) 280 CONTINUE ISWITC = ISWITC + 1 GO TO 140 C C ************************************ C USE HEUN PREDICTOR FOR 4TH ORDER C APPROX. SOLUTION. C ************************************ 290 CONTINUE H = H1 IF (JRAY.NE.JEND) H = T(JRAY+1) - T(JRAY) D = F(T(JRAY)+H,W(I3+1),W(I4+1),JCOMP) C = F(T(JRAY)+.5*H,W(I7+1),W(I8+1),JCOMP) SS = B - T(JRAY) R = SS/H DO 300 I=1,N L5 = I5 + I L6 = I6 + I W(L5) = X(I,JRAY) W(L6) = XL(I,JRAY) 300 CONTINUE I = JCOMP L1 = I1 + I W(L1) = F(T(JRAY),W(I5+1),W(I6+1),JCOMP) C ************************************ C RETURN 4TH ORDER APROXIMATION FOR C USE IN F IN MERSON METHOD C ************************************ ANS = X(I,JRAY) + SS*(W(L1)+.5*R*(-3.*W(L1)+4.*C-D)+R*R/3.* * (2.*W(L1)-4.*C+2.*D)) RETURN C END .