You are on page 1of 9

Appendix B Sizing/Carpet Plot Code

% Initial Sizing Code


% AAE 451 Spring 06
% Group 5
clear
clc
close all
% Input sectipon
cruise_target=150; % tartet cruise speed [kts]
climb_target=1350; % climb rate target [fpm]
Turn_n_target=2;
% turn load factor target (>=)
BFL_target=1500;
% balanced field length [ft]
Range=600;
% [nmi]
AA_Range=0;
% alternate airport range [nmi]
Speed=150;
% Cruise speed [kts]
Endur=.75;
% loiter endurance [hrs]
W_crew=150;
% crew weight [lbs]
W_payload=450;
% payload weight [lbs]
Alt=8000;
% cruise altitude [ft]
divert_alt=2000;
% divert/loiter altitude [ft]
Prop_Eff=.86;
% prop efficiency in cruise
bhpSFC=.439;
% brake horsepower Specific Fuel Consumption
SFC=bhpSFC.*Speed.*1.687./(550.*Prop_Eff); % SFC Calculation
Stall_speed=57;
% stall speed [kts]
WingSweep = 0;
% Wing Sweep
taper = .5;
% Taper Ratio of wing
t_c = .12;
% Thickness to chord of wing
Limit = 3.8;
% Limit Load Factor
Nz = 1.5*Limit;
% Ultimate Load Factor
Sweepht = 0;
% Horiz Tail Sweep
taperht = .5;
% Horiz Tail taper ratio
Ht_Hv = 0;
% 0 for conventional tail, 1 for T-tail
Sweepvt = 0;
% Vertical Tail Sweep
tapervt = .5;
% Vertical Tail Taper ratio
Sf = 258.3;
% Fuselage wetted area [ft^2] (From Zheng's model)
Lt = 18;
% Tail length (wing MAC to tail MAC) [ft]
L = 26;
% Fuselage Structural Length [ft]
D = 4;
% Fuselage Structural Depth [ft]
Nl = 1.5;
% Ultimate Landing load factor
NumMainGear = 2;
% Number of Main landing gear
Lm = 37;
% Extended Length of Main Gear [inches]
Ln = 29;
% Extended Length of Nose Gear [inches]
Wen = 350;
% Weight of Engine [lbs]
Nen = 1;
% Number of Engines
Nt = 2;
% Number of Fuel Tanks
Wuav = 30;
% Uninstalled Avionics Weight [lbs]
idle_thrust=.2;
% idle speed thrust percentage
idle_SFC=SFC;
% idle speed SFC percentage
takeoff_thrust=1;
% takeoff trust percentage
takeoff_SFC=SFC;
% takeoff SFC percentage
climb_rate=700;
% climb rate [feet/minute]
CD0=.023;
% Parasite drag
CL_mindrag=.075;
% Minimum drag CL
LD_full_flaps=5;
% lift-to-drag ratio with full flaps

Team V; 2
q_cruise=.5*.001869*(Speed*1.6878)^2; % Cruise Dynamic Pressure (8000ft
150kts)
climb_time=Alt./climb_rate./60;
% time to climb [hr]
rho_to=0.0024;
% air density at takeoff [slug/ft^3]
rho_sl=0.0024;
% air density at takeoff [slug/ft^3]
rho_climb=0.0024;
% air density at climb [slug/ft^3]
rho_cruise=.001869; % air density at cruise [slug/ft^3]
% For loop indicies
j=1;
% For loops
for AR=12:-1:6;
% aspect ratio
i=1;
e=0.0286*AR+0.4359; % Oswald's efficiency factor
for WS=23:-.2:14;

% wing loading

% While loop inputs


W0_guess=2750;
% initial GTOW guess [lbs]
W0=W0_guess-W0_guess*.05; % initialize W0 for loop
Wf_guess=300;
% Initial fuel weight guess [lbs]
w4w3=.9;
% initial guess for cruise fuel fraction
LD_climb=10.2;
% initial guess for lift-to-drag ratio at climb
tol=.0001;
% convergence tolerance
iteradd=.05;
% amount added/subtracted from weight guess each
iteration until ...
% W0_guess and W0 are within "tol" of each other
while(abs((W0_guess-mean(W0))/mean(W0)) > tol)
% loop dependant inputs
Swing=W0_guess./WS; % Wing Area [ft^2]
CL_cruise= W0/(.5*rho_cruise*(Speed*1.6878)^2*Swing);
% lift
coefficient at cruise
CD_cruise=0.0756*CL_cruise^2-0.0008*CL_cruise+0.0233;
% drag
coefficient at cruise
LD_cruise=CL_cruise/CD_cruise;
% lift-to-drag ratio at cruise
k_factor=1./(pi.*AR.*e);
% aerodynamic constant "K"
CL_minthrust=sqrt((CD0+k_factor*CL_mindrag)/k_factor); % CL at
minimum thrust
CD_minthrust=0.0756*CL_minthrust^2-0.0008*CL_minthrust+0.0233;
% drag coefficient at min thrust (Raymer 17.14)
LD_minthrust=CL_minthrust/CD_minthrust; % lift-to-drag ratio at
min thrust
PW=200./W0_guess;
% power-to-weight ratio
TW=PW./(Speed.*1.6878).*550.*Prop_Eff; % thrust-to-weight ratio
Wfw = Wf_guess;
% Weight of Fuel in Wing [lbs]
Wdg = W0_guess;
% Flight Design Gross Weight [lbs]
Wl = Wdg;
% Design Landing Weight
Vt = Wfw/7.344;
% Total Fuel Volume [gal]
Vi = Vt;
% Internal Tanks Volume [gal]
Sht = Swing*.12117; % Horiz Tail Area [ft^2]
Svt = Swing*.071;
% Vertical Tail Area [ft^2]
Bw = sqrt(AR*Swing); % Wing Span
% Weight calcs
% Design Mission Weight Ratios

Team V; 3
w1w0=1-idle_SFC.*(14./60).*(idle_thrust);
% Taxi to runway
(Raymer 19.7)
w2w1=1-takeoff_SFC.*(1./60).*(takeoff_thrust);
% Takeoff
(Raymer 19.7)
w3w2=exp(-SFC./3600.*((Alt+1./(2*32.2).*(Speed.*1.687).^2)(50+1./(2*32.2).*(Stall_speed.*1.1.*1.687).^2))...
./((Speed-Stall_speed*1.1)./2.*1.687.*(1(1./(LD_climb.*TW))))); % Climb (Raymer 19.8)
w4w3=exp(-(Range-climb_time.*Speed).*SFC./(Speed.*LD_cruise));
% Cruise Climb (range equation) (Raymer 19.10)
w5w4=.9989; % Descend
w6w5=exp(SFC./3600.*((divert_alt+1./(2*32.2).*(Speed.*1.687).^2)(50+1./(2*32.2).*(Stall_speed.*1.1.*1.687).^2))...
./((Speed-Stall_speed*1.1)./2.*1.687.*(1(1./(LD_climb.*TW))))); % Missed Approach (climb again) (Raymer 19.8)
w7w6=exp(-(AA_Range.*SFC)./(Speed.*LD_cruise));
% Cruise to
alternate airport **NOT USED** (range equation)
w8w7=exp(-(Endur.*SFC)./LD_cruise);
% 45 minute
loiter (endurance equation) (Raymer 19.11)
w9w8=w5w4;
% Descend again
w10w9=.995; % Landing (Raymer 6.23)
% Empty Weight
Wwing =
0.036.*Swing.^0.758.*Wfw.^0.0035.*(AR./cos(WingSweep).^2).^0.6.*...
q_cruise.^.006.*taper.^.04.*(100.*t_c./cos(WingSweep)).^.3.*(Nz*Wdg).^.49;
% Wing Raymer (15.46)
Whtail = 0.016.*(Nz.*Wdg).^.414.*q_cruise.*.168.*Sht.^.896*...
(100.*t_c./cos(WingSweep)).^.12.*(AR./cos(Sweepht).^2).^.043.*taperht.^-.02;
% Horizontal Tail
Raymer (15.47)
Wvtail =
0.073.*(1+.2.*Ht_Hv).*(Nz.*Wdg).^.376.*q_cruise.^.122.*Svt.^.873.*...
(100.*t_c./cos(Sweepvt)).^.49.*(AR./cos(Sweepvt).^2).^.357.*tapervt.^.039;
% Vertical Tail
Raymer (15.48)
Wfuselage = .052.*Sf.^1.086.*(Nz.*Wdg).^.177.*Lt.^.051.*(L./D).^-.072.*q_cruise.^.241; % Fuselage Raymer (15.49)
Wmaingear = .095.*(NumMainGear.*Nl.*Wl).^.768.*(Lm./12).^.409;
% Main Landing gear (15.50)
Wnosegear = .125.*(Nl.*Wl).^.566.*(Ln./12).^.845;
% Nose Gear Weight (15.51)
Winstalled_engine = 390+51;
% Weight of Installed Engine (15.52)
Wfuel_system =
2.49.*Vt.^.726.*(1./(1+Vi./Vt)).^.363.*Nt.^.242.*Nen.^.157; % Fuel System
(15.53)
Wflight_controls = .053.*L.^1.536.*Bw.^.371.*(Nz.*Wdg.*10.^4).^.80;
% Flight Controls (15.54)
Whydraulics = .001.*Wdg;
% Hydraulics
(15.55)
Wavionics = 2.117.*Wuav.^.933;
% Avionics
(15.57)
Welectrical = 12.57.*(Wfuel_system+Wavionics).^.51; % Electrical
system (15.56)
% A/C and Anti-Ice not included (15.58)

Team V; 4
Wfurnishings = .0582.*Wdg -65;

% Furnishings

% Empty Weight total


We=Wwing+Whtail+Wvtail+Wfuselage+Wmaingear+Wnosegear+Winstalled_engine+Wfuel_
system+...
Wflight_controls+Whydraulics+Wavionics+Welectrical+Wfurnishings;
% Weight Fractions
WeW0=We./W0_guess;
WfW0=1.01.*(1w1w0.*w2w1.*w3w2.*w4w3.*w5w4.*w6w5.*w7w6.*w8w7.*w9w8.*w10w9);
% Iteration of W0
if W0_guess < W0
W0_guess=W0_guess+iteradd;
elseif W0_guess > W0
W0_guess=W0_guess-iteradd;
else
fprintf('ERROR, suggest changing "iteradd" or "tol"\n')
end
W0=(W_crew+W_payload)./(1-WfW0-WeW0); % Empty Weight Calculation
Wf_guess=W0_guess.*WfW0;
% Fuel Weight
AMPRPrice=W0.*WeW0.*.65.*.27705;
% Price estimate
% Diverging W0 and W0_guess correctoin (allows code to continue
through a non-converging senario)
if W0<=-1000
W0_guess=3200;
W0=3200
end
end % While loop end
% Redoing some inputs because matlab sometimes says they dont exist
when outside of the loop
% Also includes some extra calculations for output of final design
e=0.0286*AR+0.4359; % Oswald's efficiency factor
k_factor=1./(pi.*AR.*e);
PW=200./W0_guess;
% power-to-weight ratio
TW=PW./(Speed.*1.687).*550.*Prop_Eff; % thrust-to-weight ratio
Swing=W0_guess./WS; % Wing Area [ft^2]
prop_diam=74/12;
% prop diameter [ft]
CL_max=1.6;
% max lift coefficient
v_stall=sqrt(2/(rho_to*CL_max)*WS);
q_to=.5*rho_to*(v_stall*1.1*1.687)^2; % dynamic pressure at takeoff
V_climb=sqrt((2.*W0)./(rho_climb.*Swing).*sqrt(k_factor/CD0));
q_climb=.5.*rho_climb.*V_climb.^2;
% dynamic pressure at climb
D_climb=q_climb.*Swing.*(CD0+CD0./3);
CL_to=W0/(.5*rho_to*(1.1*v_stall*1.6878)^2*Swing);
% lift
coefficient at takeoff
CL_climb=W0/(.5*rho_to*(V_climb)^2*Swing);
% lift
coefficeient at climb
CD_climb=0.0911*CL_climb^2+0.0045*CL_climb+0.0237;
% drag
coefficient at climb

Team V; 5
LD_climb=CL_climb/CD_climb;
% lift-to-drag
ratio at climb
CL_cruise= W0/(.5*rho_cruise*(Speed*1.6878)^2*Swing); % lift
coefficeient at cruise
prop_eff_climb=.76;
% climb prop
efficency
Best_range=550*Prop_Eff*LD_minthrust*log(1/w4w3)/bhpSFC; % best range
cruise distance (Raymer 17.28)
V_minthrust=sqrt(2*WS/rho_cruise*sqrt(k_factor/CD0))/1.6878; % Speed
for minimum thrust (best range) [fps]
% Constraint Calculations
% Takeoff Distance
Tav=5.75.*200.*((rho_to/rho_sl).*prop_diam^2./200)^(1/3); % average
thrust
G_factor=asin(TW-(q_to.*Swing.*CD0+q_to.*Swing.*((CL_toCL_mindrag)^2.*k_factor))./W0);
BFL(i)=(0.863/(1+2.3*G_factor)).*((WS./(rho_to.*32.2*CL_climb))+50)...
.*(1./(Tav-(.01.*CL_max+.02))+2.7)+(655./(sqrt(rho_to/rho_sl)));
% Balenced Field Length (Raymer 17.112,17.114)
% Turn n value
CD0_K_turn = CD0/k_factor-2*CL_cruise*CL_mindrag+CL_mindrag^2;
Turn_n(i)=q_cruise.*Swing./W0.*sqrt(CD0_K_turn); % Turn Load factor
(Raymer 17.54)
% Climb Rate
Climb_rate(i)=((550.*200.*prop_eff_climb./W0)-D_climb*V_climb/W0)*60;
% Climb rate (Raymer 17.19, 17.44)
% Cruise Speed
options=optimset('Display','off');
V_fps=fsolve('cruiseconst2',200,options,CD0,W0,rho_cruise,Swing,Prop_Eff,k_fa
ctor,CL_mindrag);
V_cruiseconst(i)=V_fps/1.6878;
% Landing Distance (not a constraint, calculated for completeness)
approach_angle=abs(asin((idle_thrust*TW)-1/(LD_full_flaps)));
R=.205*(Stall_speed*1.6878)^2;
Htr=R*(1-cos(approach_angle));
approach_distance=(50-Htr)/tan(approach_angle);
flare_distance=abs(R*((idle_thrust*TW)-1/(LD_full_flaps)));
Kt=idle_thrust*TW-.4;
Ka=rho_to/(2*WS)*(.4*CL_max-CD0-k_factor*CL_max^2);
ground_roll=(1/(2*32.2*Ka))*log((Kt)/(Kt+Ka*(Stall_speed*1.6878)^2));
landing_distance=approach_distance+flare_distance+ground_roll+(Stall_speed*1.
6878)*2;
% Plotting Preparation
toplot_a(i)=WS;
toplot_b(i)=W0;
W0_vector(i)=W0;
WS_vector(i)=WS;
HP_vector(i)=PW.*W0;
i=i+1;

Team V; 6

end % Inside for loop end


toplot_c(j)=AR;
toplot_d(j)=W0;
% Plotting
figure(1)
hold on
grid on
plot(toplot_a,toplot_b,'b-','LineWidth',2)
title('Wing loading vs. GTOW')
xlabel('W/S [lbs/ft^2]')
ylabel('GTOW [lbs]')
% Setting Matricies for constraint calculations
BFL_outside(j,:)=BFL';
Turn_n_outside(j,:)=Turn_n';
Climb_outside(j,:)=Climb_rate';
W0_outside(j,:)=W0_vector';
WS_outside(j,:)=WS_vector';
HP_outside(j,:)=HP_vector';
V_cruise_outside(j,:)=V_cruiseconst';
j=j+1;
end % outside for loop end
% Calculating size of matrices for constraint calculations
matrix_size=size(BFL_outside);
% Linear interpolation along AR curves to find where constraints lie so they
can be plotted
% Takeoff distance constraint
for ii=1:1:matrix_size(1)
for jj=1:1:(matrix_size(2)-1)
if BFL_outside(ii,jj)<=BFL_target & BFL_outside(ii,jj+1)>BFL_target
WS_toconst(ii)=WS_outside(ii,jj)+(BFL_targetBFL_outside(ii,jj))/(BFL_outside(ii,jj+1)BFL_outside(ii,jj))*(WS_outside(ii,jj+1)-WS_outside(ii,jj));
W0_toconst(ii)=W0_outside(ii,jj)+(BFL_targetBFL_outside(ii,jj))/(BFL_outside(ii,jj+1)BFL_outside(ii,jj))*(W0_outside(ii,jj+1)-W0_outside(ii,jj));
elseif BFL_outside(ii,jj)>=BFL_target &
BFL_outside(ii,jj+1)<BFL_target
WS_toconst(ii)=WS_outside(ii,jj)+(BFL_targetBFL_outside(ii,jj))/(BFL_outside(ii,jj+1)BFL_outside(ii,jj))*(WS_outside(ii,jj+1)-WS_outside(ii,jj));
W0_toconst(ii)=W0_outside(ii,jj)+(BFL_targetBFL_outside(ii,jj))/(BFL_outside(ii,jj+1)BFL_outside(ii,jj))*(W0_outside(ii,jj+1)-W0_outside(ii,jj));
end
end
end
% Turn n value constraint
for ii=1:1:matrix_size(1)
for jj=1:1:(matrix_size(2)-1)

Team V; 7
if Turn_n_outside(ii,jj)<=Turn_n_target &
Turn_n_outside(ii,jj+1)>Turn_n_target
WS_turnconst(ii)=WS_outside(ii,jj)+(Turn_n_targetTurn_n_outside(ii,jj))/(Turn_n_outside(ii,jj+1)Turn_n_outside(ii,jj))*(WS_outside(ii,jj+1)-WS_outside(ii,jj));
W0_turnconst(ii)=W0_outside(ii,jj)+(Turn_n_targetTurn_n_outside(ii,jj))/(Turn_n_outside(ii,jj+1)Turn_n_outside(ii,jj))*(W0_outside(ii,jj+1)-W0_outside(ii,jj));
elseif Turn_n_outside(ii,jj)>=Turn_n_target &
Turn_n_outside(ii,jj+1)<Turn_n_target
WS_turnconst(ii)=WS_outside(ii,jj)+(Turn_n_targetTurn_n_outside(ii,jj))/(Turn_n_outside(ii,jj+1)Turn_n_outside(ii,jj))*(WS_outside(ii,jj+1)-WS_outside(ii,jj));
W0_turnconst(ii)=W0_outside(ii,jj)+(Turn_n_targetTurn_n_outside(ii,jj))/(Turn_n_outside(ii,jj+1)Turn_n_outside(ii,jj))*(W0_outside(ii,jj+1)-W0_outside(ii,jj));
end
end
end
% Climb rat constraint
for ii=1:1:matrix_size(1)
for jj=1:1:(matrix_size(2)-1)
if Climb_outside(ii,jj)<=climb_target &
Climb_outside(ii,jj+1)>climb_target
WS_climbconst(ii)=WS_outside(ii,jj)+(climb_targetClimb_outside(ii,jj))/(Climb_outside(ii,jj+1)Climb_outside(ii,jj))*(WS_outside(ii,jj+1)-WS_outside(ii,jj));
W0_climbconst(ii)=W0_outside(ii,jj)+(climb_targetClimb_outside(ii,jj))/(Climb_outside(ii,jj+1)Climb_outside(ii,jj))*(W0_outside(ii,jj+1)-W0_outside(ii,jj));
elseif Climb_outside(ii,jj)>=climb_target &
Climb_outside(ii,jj+1)<climb_target
WS_climbconst(ii)=WS_outside(ii,jj)+(climb_targetClimb_outside(ii,jj))/(Climb_outside(ii,jj+1)Climb_outside(ii,jj))*(WS_outside(ii,jj+1)-WS_outside(ii,jj));
W0_climbconst(ii)=W0_outside(ii,jj)+(climb_targetClimb_outside(ii,jj))/(Climb_outside(ii,jj+1)Climb_outside(ii,jj))*(W0_outside(ii,jj+1)-W0_outside(ii,jj));
end
end
end
% Cruise speed constraint
for ii=1:1:matrix_size(1)
for jj=1:1:(matrix_size(2)-1)
if V_cruise_outside(ii,jj)<=cruise_target &
V_cruise_outside(ii,jj+1)>cruise_target
WS_cruiseconst(ii)=WS_outside(ii,jj)+(cruise_targetV_cruise_outside(ii,jj))/(V_cruise_outside(ii,jj+1)V_cruise_outside(ii,jj))*(WS_outside(ii,jj+1)-WS_outside(ii,jj));
W0_cruiseconst(ii)=W0_outside(ii,jj)+(cruise_targetV_cruise_outside(ii,jj))/(V_cruise_outside(ii,jj+1)V_cruise_outside(ii,jj))*(W0_outside(ii,jj+1)-W0_outside(ii,jj));
elseif V_cruise_outside(ii,jj)>=cruise_target &
V_cruise_outside(ii,jj+1)<cruise_target

Team V; 8
WS_cruiseconst(ii)=WS_outside(ii,jj)+(cruise_targetV_cruise_outside(ii,jj))/(V_cruise_outside(ii,jj+1)V_cruise_outside(ii,jj))*(WS_outside(ii,jj+1)-WS_outside(ii,jj));
W0_cruiseconst(ii)=W0_outside(ii,jj)+(cruise_targetV_cruise_outside(ii,jj))/(V_cruise_outside(ii,jj+1)V_cruise_outside(ii,jj))*(W0_outside(ii,jj+1)-W0_outside(ii,jj));
end
end
end
% plotting constraints
plot(WS_toconst,W0_toconst,'m','LineWidth',2)
plot(WS_turnconst,W0_turnconst,'g','LineWidth',2)
plot(WS_cruiseconst,W0_cruiseconst,'k','LineWidth',2)
plot(WS_climbconst,W0_climbconst,'c','LineWidth',2)
% Stall Constraint
W_Sstall = .5*CL_max*rho_to*(Stall_speed*1.6878)^2;
plot([W_Sstall W_Sstall],[2500 3100],'r','LineWidth',2);
% Setting the axes for a good plot
axis([14 20 2500 3100])

Team V; 9

You might also like