C C .................................................................. C C SUBROUTINE DRTMI C C PURPOSE C TO SOLVE GENERAL NONLINEAR EQUATIONS OF THE FORM FCT(X)=0 C BY MEANS OF MUELLER-S ITERATION METHOD. C C USAGE C CALL DRTMI (X,F,FCT,XLI,XRI,EPS,IEND,IER) C PARAMETER FCT REQUIRES AN EXTERNAL STATEMENT. C C DESCRIPTION OF PARAMETERS C X - DOUBLE PRECISION RESULTANT ROOT OF EQUATION C FCT(X)=0. C F - DOUBLE PRECISION RESULTANT FUNCTION VALUE C AT ROOT X. C FCT - NAME OF THE EXTERNAL DOUBLE PRECISION FUNCTION C SUBPROGRAM USED. C XLI - DOUBLE PRECISION INPUT VALUE WHICH SPECIFIES THE C INITIAL LEFT BOUND OF THE ROOT X. C XRI - DOUBLE PRECISION INPUT VALUE WHICH SPECIFIES THE C INITIAL RIGHT BOUND OF THE ROOT X. C EPS - SINGLE PRECISION INPUT VALUE WHICH SPECIFIES THE C UPPER BOUND OF THE ERROR OF RESULT X. C IEND - MAXIMUM NUMBER OF ITERATION STEPS SPECIFIED. C IER - RESULTANT ERROR PARAMETER CODED AS FOLLOWS C IER=0 - NO ERROR, C IER=1 - NO CONVERGENCE AFTER IEND ITERATION STEPS C FOLLOWED BY IEND SUCCESSIVE STEPS OF C BISECTION, C IER=2 - BASIC ASSUMPTION FCT(XLI)*FCT(XRI) LESS C THAN OR EQUAL TO ZERO IS NOT SATISFIED. C C REMARKS C THE PROCEDURE ASSUMES THAT FUNCTION VALUES AT INITIAL C BOUNDS XLI AND XRI HAVE NOT THE SAME SIGN. IF THIS BASIC C ASSUMPTION IS NOT SATISFIED BY INPUT VALUES XLI AND XRI, THE C PROCEDURE IS BYPASSED AND GIVES THE ERROR MESSAGE IER=2. C C SUBROUTINES AND FUNCTION SUBPROGRAMS REQUIRED C THE EXTERNAL DOUBLE PRECISION FUNCTION SUBPROGRAM FCT(X) C MUST BE FURNISHED BY THE USER. C C METHOD C SOLUTION OF EQUATION FCT(X)=0 IS DONE BY MEANS OF MUELLER-S C ITERATION METHOD OF SUCCESSIVE BISECTIONS AND INVERSE C PARABOLIC INTERPOLATION, WHICH STARTS AT THE INITIAL BOUNDS C XLI AND XRI. CONVERGENCE IS QUADRATIC IF THE DERIVATIVE OF C FCT(X) AT ROOT X IS NOT EQUAL TO ZERO. ONE ITERATION STEP C REQUIRES TWO EVALUATIONS OF FCT(X). FOR TEST ON SATISFACTORY C ACCURACY SEE FORMULAE (3,4) OF MATHEMATICAL DESCRIPTION. C FOR REFERENCE, SEE G. K. KRISTIANSEN, ZERO OF ARBITRARY C FUNCTION, BIT, VOL. 3 (1963), PP.205-206. C C .................................................................. C SUBROUTINE DRTMI(X,F,FCT,XLI,XRI,EPS,IEND,IER) C C DOUBLE PRECISION X,F,FCT,XLI,XRI,XL,XR,FL,FR,TOL,TOLF,A,DX,XM,FM C C PREPARE ITERATION IER=0 XL=XLI XR=XRI X=XL TOL=X F=FCT(TOL) IF(F)1,16,1 1 FL=F X=XR TOL=X F=FCT(TOL) IF(F)2,16,2 2 FR=F IF(DSIGN(1.D0,FL)+DSIGN(1.D0,FR))25,3,25 C C BASIC ASSUMPTION FL*FR LESS THAN 0 IS SATISFIED. C GENERATE TOLERANCE FOR FUNCTION VALUES. 3 I=0 TOLF=100.*EPS C C C START ITERATION LOOP 4 I=I+1 C C START BISECTION LOOP DO 13 K=1,IEND X=.5D0*(XL+XR) TOL=X F=FCT(TOL) IF(F)5,16,5 5 IF(DSIGN(1.D0,F)+DSIGN(1.D0,FR))7,6,7 C C INTERCHANGE XL AND XR IN ORDER TO GET THE SAME SIGN IN F AND FR 6 TOL=XL XL=XR XR=TOL TOL=FL FL=FR FR=TOL 7 TOL=F-FL A=F*TOL A=A+A IF(A-FR*(FR-FL))8,9,9 8 IF(I-IEND)17,17,9 9 XR=X FR=F C C TEST ON SATISFACTORY ACCURACY IN BISECTION LOOP TOL=EPS A=DABS(XR) IF(A-1.D0)11,11,10 10 TOL=TOL*A 11 IF(DABS(XR-XL)-TOL)12,12,13 12 IF(DABS(FR-FL)-TOLF)14,14,13 13 CONTINUE C END OF BISECTION LOOP C C NO CONVERGENCE AFTER IEND ITERATION STEPS FOLLOWED BY IEND C SUCCESSIVE STEPS OF BISECTION OR STEADILY INCREASING FUNCTION C VALUES AT RIGHT BOUNDS. ERROR RETURN. IER=1 14 IF(DABS(FR)-DABS(FL))16,16,15 15 X=XL F=FL 16 RETURN C C COMPUTATION OF ITERATED X-VALUE BY INVERSE PARABOLIC INTERPOLATION 17 A=FR-F DX=(X-XL)*FL*(1.D0+F*(A-TOL)/(A*(FR-FL)))/TOL XM=X FM=F X=XL-DX TOL=X F=FCT(TOL) IF(F)18,16,18 C C TEST ON SATISFACTORY ACCURACY IN ITERATION LOOP 18 TOL=EPS A=DABS(X) IF(A-1.D0)20,20,19 19 TOL=TOL*A 20 IF(DABS(DX)-TOL)21,21,22 21 IF(DABS(F)-TOLF)16,16,22 C C PREPARATION OF NEXT BISECTION LOOP 22 IF(DSIGN(1.D0,F)+DSIGN(1.D0,FL))24,23,24 23 XR=X FR=F GO TO 4 24 XL=X FL=F XR=XM FR=FM GO TO 4 C END OF ITERATION LOOP C C C ERROR RETURN IN CASE OF WRONG INPUT DATA 25 IER=2 RETURN END