"CODE" 33070; "PROCEDURE" EFRK(T,TE,M0,M,U,SIGMA,PHI,DIAMETER,DERIVATIVE,K,STEP,R,L, BETA,THIRDORDER,TOL,OUTPUT); "VALUE" R,L; "INTEGER" M0,M,K,R,L; "REAL" T,TE,SIGMA,PHI,DIAMETER,STEP,TOL; "ARRAY" U,BETA; "BOOLEAN" THIRDORDER; "PROCEDURE" DERIVATIVE,OUTPUT; "BEGIN" "INTEGER" N; "REAL" THETA0,THETANM1,H,B,B0,PHI0,PHIL,PI,COSPHI,SINPHI,EPS,BETAR; "BOOLEAN" FIRST,LAST,COMPLEX,CHANGE; "INTEGER" "ARRAY" P[1:L]; "REAL" "ARRAY" MU,LABDA[0:R+L-1],PT[0:R],FAC,BETAC[0:L-1],RL[M0:M], A[1:L,1:L],AUX[0:3]; "PROCEDURE" FORM CONSTANTS; "BEGIN" "INTEGER" I; FIRST:="FALSE"; FAC[0]:=1; "FOR" I:=1 "STEP" 1 "UNTIL" L-1 "DO" FAC[I]:=I*FAC[I-1]; PT[R]:=L*FAC[L-1]; "FOR" I:=1 "STEP" 1 "UNTIL" R "DO" PT[R-I]:=PT[R-I+1]*(L+I)/I "END" FORM CONSTANTS; "PROCEDURE" FORM BETA; "BEGIN" "INTEGER" I,J; "REAL" BB,C,D; "IF" FIRST "THEN" FORM CONSTANTS; "IF" L=1 "THEN" "BEGIN" C:=1-EXP(-B); "FOR" J:=1 "STEP" 1 "UNTIL" R "DO" C:=BETA[J]-C/B; BETA[R+1]:=C/B "END" "ELSE" "IF" B>40 "THEN" "BEGIN" "FOR" I:=R+1 "STEP" 1 "UNTIL" R+L "DO" "BEGIN" C:=0; "FOR" J:=0 "STEP" 1 "UNTIL" R "DO" C:=BETA[J]*PT[J]/(I-J)-C/B; BETA[I]:=C/B/FAC[L+R-I]/FAC[I-R-1] "END"; "END" "ELSE" "BEGIN" D:=C:=EXP(-B); BETAC[L-1]:=D/FAC[L-1]; "FOR" I:=1 "STEP" 1 "UNTIL" L-1 "DO" "BEGIN" C:=B*C/I; D:=D+C; BETAC[L-1-I]:=D/FAC[L-1-I] "END"; BB:=1; "FOR" I:=R+1 "STEP" 1 "UNTIL" R+L "DO" "BEGIN" C:=0; "FOR" J:=0 "STEP" 1 "UNTIL" R "DO" C:=(BETA[J]-("IF" JL-2 "THEN" 2 "ELSE" L-2*I; COSPHIL :=COSIPHI*COSPHI-SINIPHI*SINPHI; SINIPHI:=COSIPHI*SINPHI+SINIPHI*COSPHI; COSIPHI:=COSPHIL; "FOR" J:=L "STEP" -2 "UNTIL" C3 "DO" "BEGIN" D[J]:=D[J]+ZI*C2*SINIPHI; D[J-1]:=D[J-1]-ZI*C2*COSIPHI; C2:=C2*C1; C1:=C1-1 "END"; ZI:=ZI*B1 "END" "END" RIGHT HAND SIDE; "IF" PHI0^=PHIL "THEN" ELEMENTS OF MATRIX; RIGHTHANDSIDE; SOL(A,L,P,D); "FOR" I:=1 "STEP" 1 "UNTIL" L "DO" BETA[R+I]:=D[L+1-I]*B1 "PROCEDURE" COEFFICIENT; "BEGIN" "INTEGER" J,K; "REAL" C; B0:=B; PHI0:=PHI; "IF" B>=1 "THEN" "BEGIN" "IF" COMPLEX "THEN" SOLUTION OF COMPLEX EQUATIONS "ELSE" FORM BETA "END"; LABDA[0]:=MU[0]:=0; "IF" THIRDORDER "THEN" "BEGIN" THETA0:=.25; THETANM1:=.75; "IF" B<1 "THEN" "BEGIN" C:=MU[N-1]:=2/3; LABDA[N-1]:=5/12; "FOR" J:=N-2 "STEP" -1 "UNTIL" 1 "DO" "BEGIN" C:=MU[J]:=C/(C-.25)/(N-J+1); LABDA[J]:=C-.25 "END" "END" "ELSE" "BEGIN" C:=MU[N-1]:=BETA[2]*4/3; LABDA[N-1]:=C-.25; "FOR" J:=N-2 "STEP" -1 "UNTIL" 1 "DO" "BEGIN" C:=MU[J]:=C/(C-.25)*BETA[N-J+1]/BETA[N-J]/ ("IF" JDIAMETER; "IF" DIAMETER>0 "THEN" HSTAB:=(SIGMA**2/(DIAMETER*(DIAMETER*.25+D)))**(L*.5/R)/ BETAR/SIGMA "ELSE" HSTAB:=H; D:= "IF" THIRDORDER "THEN" (2*TOL/EPS/BETA[R])**(1/(N-1))* 4**((L-1)/(N-1)) "ELSE" (TOL/EPS)**(1/R)/BETAR; HSTABINT:= ABS(D/SIGMA); "IF" H>HSTAB "THEN" H:=HSTAB; "IF" H>HSTABINT "THEN" H:=HSTABINT; "IF" T+H>TE*(1-K*EPS) "THEN" "BEGIN" LAST:="TRUE"; H:=TE-T "END"; B:=H*SIGMA; D:=DIAMETER*.1*H; D:=D*D; "IF" HD) "END" STEPSIZE; "PROCEDURE" DIFFERENCESCHEME ; "BEGIN" "INTEGER" I,J; "REAL" MT,LT,THT; I:=-1; NEXTTERM: I:=I+1; MT:=MU[I]*H; LT:=LABDA[I]*H; "FOR" J:=M0 "STEP" 1 "UNTIL" M "DO" RL[J]:=U[J]+LT*RL[J]; DERIVATIVE(T+MT,RL); "IF" I=0 "OR" I=N-1 "THEN" "BEGIN" THT:="IF" I=0 "THEN" THETA0*H "ELSE" THETANM1*H; ELMVEC(M0,M,0,U,RL,THT) "END"; "IF" I