global vs
global ms
global hs
global gs
global mf
global game
global pe
global pa
global p0
global Arat
global Tav
global nang
global isp
global Cstar
global m_trans
global t_trans
global i_trans
global dist
global ts
v(1)   = vs;                
m(1)   = ms;                
h(1)   = hs;                
gam(1) = -gs;               
g      = 1.62;              
ge     = 9.81;              
        hov    = 0;         
i      = 1;
dt     = 0.05;
R(i)   = -(h(i)-hov)/sin(gam(i));
x(i)   = 0;
t(i)   = 0;
T(i)   = m(i)*(g + v(i)^2/(2*R(i)));
disp(sprintf('Conditions at Start of Gravity Turn'))
disp(sprintf('-------------------------------------------------'))
disp(sprintf('                                                 '))
disp(sprintf('Velocity              %g    km/s',v(1)/1000))
disp(sprintf('Altitude              %g    km',h(1)/1000))
disp(sprintf('FPA                   %g   deg',gam(1)*180/pi))
disp(sprintf('Slant Range           %g     km',R(1)/1000))
disp(sprintf('Thrust                %g    N',T(1)))
disp(sprintf('                                                 '))
disp(sprintf('-------------------------------------------------'))
disp(sprintf('                                                 '))
while h(i) > hov
    dv   = -g*(T(i)/(m(i)*g)+sin(gam(i)));
    dgam = (-g/v(i))*cos(gam(i));
    dh   = v(i)*sin(gam(i));
    dx   = v(i)*cos(gam(i));
    dm   = -T(i)/(ge*isp);
    v(i+1)   = v(i) + dv*dt;
    gam(i+1) = gam(i) + dgam*dt;
    h(i+1)   = h(i) + dh*dt;
    x(i+1)   = x(i) + dx*dt;
    m(i+1)   = m(i) + dm*dt;
    R(i+1)   = -(h(i+1)-hov)/sin(gam(i+1));
    T(i+1)   = m(i+1)*(g + v(i+1)^2/(2*R(i+1)));
    n(i+1)   = T(i+1)/(m(i+1)*g);
    t(i+1)   = t(i) + dt;
    i = i + 1;
end
m_trans = m;
t_trans = t;
i_trans = i;
disp(sprintf('Gravity Turn Summary Data'))
disp(sprintf('-------------------------------------------------'))
disp(sprintf('                                                 '))
disp(sprintf('Grav turn duration    %g      sec',t(i)))
disp(sprintf('Total entry time      %g      sec',t(i)+ts))
disp(sprintf('Grav turn dist        %g    km',x(i)/1000))
disp(sprintf('Total entry dist      %g    km',(x(i)+dist)/1000))
disp(sprintf('Final FPA             %g   deg', gam(i)*180/pi))
disp(sprintf('Propellant mass used  %g    kg',m(1)-m(i)))
disp(sprintf('-------------------------------------------------'))
if m(1)-m(i) > mf
    disp('***WARNING: You need more terminal descent fuel!***')
else
    disp('***NOTE: You have excess terminal descent fuel!***')
end
figure
subplot(2,3,1)
plot(t,h);
xlabel('Time, s');
ylabel('Altitude, m')
title('Altitude vs. Time')
subplot(2,3,2)
plot(t,gam*180/pi);
xlabel('Time, s');
ylabel('Flight Path Angle, deg')
title('Flight Path Angle vs. Time')
subplot(2,3,3)
plot(t,v);
xlabel('Time, s');
ylabel('Velocity, m/s');
title('Velocity vs Time')
subplot(2,3,4)
plot(t,T);
xlabel('Time, s');
ylabel('Thrust, N');
title('Thurst vs. Time');
subplot(2,3,[5 6])
plot(t,n);
xlabel('Time, s');
ylabel('Load Factor');
title('Load Factor vs. Time');
engine;