code 33050;
procedure EXPONENTIALLY FITTED TAYLOR(T,TE,M0,M,U,SIGMA,PHI,DIAMETER,
        DERIVATIVE,I,K,ALFA,NORM,AETA,RETA,ETA,RHO,HMIN,HSTART,OUTPUT);
integer M0,M,I,K,NORM;
real T,TE,SIGMA,PHI,DIAMETER,ALFA,AETA,RETA,ETA,RHO,HMIN,HSTART;
array U;
procedure DERIVATIVE,OUTPUT;
begin integer KL;
    real Q,EC0,EC1,EC2,H,HI,H0,H1,H2,BETAN,T2,SIGMAL,PHIL;
    real array C,RO[M0:M],BETA,BETHA[1:3];
    boolean LAST,START;

    procedure COEFFICIENT;
    begin real B,B1,B2,BB,E,BETA2,BETA3;
        B:=H*SIGMAL; B1:=B*COS(PHIL); BB:=B*B;
        if ABS(B)<"-3 then 
        begin BETA2:=.5-BB/24;
            BETA3:=1/6+B1/12;
            BETHA[3]:=.5+B1/3
        end else 
        if B1<-40 then 
        begin BETA2:=(-2*B1-4*B1*B1/BB+1)/BB;
            BETA3:=(1+2*B1/BB)/BB;
            BETHA[3]:=1/BB
        end else 
        begin E:=EXP(B1)/BB; B2:=B*SIN(PHIL);
            BETA2:=(-2*B1-4*B1*B1/BB+1)/BB;
            BETA3:=(1+2*B1/BB)/BB;
            if ABS(B2/B)<"-5 then 
            begin BETA2:=BETA2-E*(B1-3);
                BETA3:=BETA3+E*(B1-2)/B1;
                BETHA[3]:=1/BB+E*(B1-1)
            end else 
            begin BETA2:=BETA2-E*SIN(B2-3*PHIL)/B2*B;
                BETA3:=BETA3+E*SIN(B2-2*PHIL)/B2;
                BETHA[3]:=1/BB+E*SIN(B2-PHIL)/B2*B;
            end 
        end;
        BETA[1]:=BETHA[1]:=1;
        BETA[2]:=BETA2; BETA[3]:=BETA3;
        BETHA[2]:=1-BB*BETA3; B:=ABS(B);
        Q:=if B<1.5 then 4-2*B/3 else if B<6 then (30-2*B)/9
        else 2;
    real procedure NORMFUNCTION(NORM,W);
    integer NORM; array W;
    begin integer J; real S,X;
        S:=0;
        if NORM=1 then 
        begin for J:=M0 step 1 until M do 
            begin X:=ABS(W[J]); if X>S then S:=X end 
        end else 
        S:=SQRT(VECVEC(M0,M,0,W,W));
        NORMFUNCTION:=S;
    end;

    procedure LOCAL ERROR BOUND;
    ETA:=AETA+RETA * NORMFUNCTION(NORM,U);

    procedure LOCAL ERROR CONSTRUCTION(I); integer I;
    begin if I=1 then INIVEC(M0,M,RO,0);
        if I<4 then ELMVEC(M0,M,0,RO,C,BETHA[I]*HI);
        if I=4 then 
        begin ELMVEC(M0,M,0,RO,C,-H);
            RHO:=NORMFUNCTION(NORM,RO);
            EC0:=EC1;EC1:=EC2;EC2:=RHO/H**Q;
        end 
    end;

    procedure STEPSIZE;
    begin real HACC,HSTAB,HCR,HMAX,A,B,C;
        if not START then LOCAL ERROR BOUND;
        if START then 
        begin H1:=H2:=HACC:=HSTART;
            EC2:=EC1:=1; KL:=1; START:=false 
        end else 
        if KL<3 then 
        begin HACC:=(ETA/RHO)**(1/Q)*H2;
            if HACC>10*H2 then HACC:=10*H2 else KL:=KL+1
        end else 
        begin A:=(H0*(EC2-EC1)-H1*(EC1-EC0))/(H2*H0-H1*H1);
            H:=H2*(if ETA<RHO then (ETA/RHO)**(1/Q) else ALFA);
            if A>0 then 
            begin B:=(EC2-EC1-A*(H2-H1))/H1;
                C:=EC2-A*H2-B*T2; HACC:=0; HMAX:=H;
                if ^ZEROIN(HACC,H,HACC**Q*(A*HACC+B*T+C)-ETA,
                "-3*H2) then HACC:=HMAX
            end else HACC:=H;
            if HACC<.5*H2 then HACC:=.5*H2;
        end;
        if HACC<HMIN then HACC:=HMIN; H:=HACC;
        if H*SIGMAL>1 then 
        begin A:=ABS(DIAMETER/SIGMAL+"-14)/2; B:=2*ABS(SIN(PHIL));
            BETAN:=(if A>B then 1/A else 1/B)/A;
            HSTAB:=ABS(BETAN/SIGMAL);
            if HSTAB<"-14*T then goto ENDOFEFT;
            if H>HSTAB then H:=HSTAB
        end;
        HCR:=H2*H2/H1;
        if KL>2 and ABS(H-HCR)<"-6*HCR then 
        H:=if H<HCR then HCR*(1-"-7) else HCR*(1+"-7);
        if T+H>TE then 
        begin LAST:=true; HSTART:=H; H:=TE-T end;
        H0:=H1;H1:=H2;H2:=H;
    end;

    procedure DIFFERENCE SCHEME;
    begin HI:=1; SIGMAL:=SIGMA; PHIL:=PHI;
        STEPSIZE;
        COEFFICIENT;
        for I:=1,2,3 do 
        begin HI:=HI*H;
            if I>1 then DERIVATIVE(I,C);
            LOCALERRORCONSTRUCTION(I);
            ELMVEC(M0,M,0,U,C,BETA[I]*HI)
        end;
        T2:=T; K:=K+1;
        if LAST then 
        begin LAST:=false; T:=TE; START:=true 
        end else T:=T+H;
        DUPVEC(M0,M,0,C,U);
        DERIVATIVE(1,C);
        LOCALERRORCONSTRUCTION(4);
        OUTPUT;
    end;

    START:=true; LAST:=false;
    DUPVEC(M0,M,0,C,U);
    DERIVATIVE(1,C);
    if K=0 then 
    begin LOCAL ERROR BOUND; HSTART:=ETA/NORMFUNCTION(NORM,C)
    end;
NEXT LEVEL:
    DIFFERENCE SCHEME;
    if T^=TE then goto NEXT LEVEL;
ENDOFEFT:
 end EXPONENTIAL FITTED TAYLOR;
        eop