[Python] Design & build airplanes from your specifications.
Delete MATLAB scripts
Changed files
README.org
@@ -1,7 +1,9 @@
1
Removed:
#+TITLE: UCLA MAE 154B
2
Removed:
#+SUBTITLE: Spring 2019 Final Project
1
Added:
#+TITLE: Aircraft Studio
2
Added:
#+AUTHOR: Marius Peter
3
3
4
4
This program enables the creation of NACA airfoils;
5
5
the analysis of the airfoil's structural properties;
6
6
the optimization via genetic algorithm of a population of airfoils;
7
7
With the final objective of designing a lightweight FAR 23 compliant airfoil.
8
Added:
9
Added:
I adapted it from my own code for the UCLA MAE 154B final project (Spring 2019).
wing_scripts/eye_beam_example.m
@@ -1,70 +0,0 @@
1
Removed:
% Bending/Shear stress example
2
Removed:
close all;
3
Removed:
4
Removed:
length = 20; % in
5
Removed:
force = 10000; %lbs
6
Removed:
7
Removed:
%eye-beam dimensions
8
Removed:
9
Removed:
max_width = 4; % in
10
Removed:
min_width = 1; % in
11
Removed:
y_max = 4; % in
12
Removed:
center_y = 2; % in
13
Removed:
14
Removed:
15
Removed:
%max bending moment at the root...
16
Removed:
17
Removed:
M = force*length;
18
Removed:
19
Removed:
I = min_width*(2*center_y)^3/12 + 2*( max_width*(y_max-center_y)^3/12 + ...
20
Removed:
max_width*(y_max-center_y)*((y_max+center_y)/2)^2);
21
Removed:
22
Removed:
sigma_max = M * y_max / I;
23
Removed:
24
Removed:
25
Removed:
% solve for shear stress distribution
26
Removed:
% V / (I * t) * int(y*da)
27
Removed:
28
Removed:
% Point 1: evaluated at location just before thickness changes from 4 to 1 in
29
Removed:
tempCoeff = force / (I * max_width);
30
Removed:
int_y_da = ((y_max+center_y)/2) * max_width*(y_max-center_y);
31
Removed:
shear_1 = tempCoeff*int_y_da;
32
Removed:
33
Removed:
% Point 2: evaluated at location just after thickness changes from 4 to 1 in
34
Removed:
tempCoeff = force / (I * min_width);
35
Removed:
shear_2 = tempCoeff*int_y_da;
36
Removed:
37
Removed:
38
Removed:
% Point 3: evaluated at center of beam
39
Removed:
tempCoeff = force / (I * min_width);
40
Removed:
int_y_da = (center_y/2) * min_width*center_y;
41
Removed:
shear_3 = shear_2+tempCoeff*int_y_da;
42
Removed:
43
Removed:
%evaluating continous integral for width of 4..
44
Removed:
int_y_da_4 = force / (I * max_width)*4*(y_max^2/2 - (center_y:.1:y_max).^2/2);
45
Removed:
46
Removed:
%evaluating continous integral for width of 1..
47
Removed:
int_y_da_1 = shear_2 + force / (I * min_width)*1*(center_y^2/2 - (0:.1:center_y).^2/2);
48
Removed:
49
Removed:
figure; grid on; hold on;set(gcf,'color',[1 1 1]);
50
Removed:
plot(int_y_da_4,center_y:.1:y_max,'linewidth',2)
51
Removed:
plot(int_y_da_1,0:.1:center_y,'linewidth',2)
52
Removed:
plot(int_y_da_1,0:-.1:-center_y,'linewidth',2)
53
Removed:
plot(int_y_da_4,-center_y:-.1:-y_max,'linewidth',2)
54
Removed:
plot([shear_1 shear_2],[center_y center_y],'linewidth',2)
55
Removed:
plot([shear_1 shear_2],[-center_y -center_y],'linewidth',2)
56
Removed:
57
Removed:
plot(shear_1,center_y,'o')
58
Removed:
plot(shear_2,center_y,'o')
59
Removed:
plot(shear_3,0,'o')
60
Removed:
plot(shear_2,-center_y,'o')
61
Removed:
plot(shear_1,-center_y,'o')
62
Removed:
63
Removed:
xlabel('shear stress (lb/in^2)','fontsize',16,'fontweight','bold');ylabel('Distance from Center (in)','fontsize',16,'fontweight','bold')
64
Removed:
set(gca,'FontSize',16,'fontweight','bold');
65
Removed:
66
Removed:
67
Removed:
figure; grid on; hold on;set(gcf,'color',[1 1 1]);
68
Removed:
plot([0 4 4 2.5 2.5 4 4 0 0 1.5 1.5 0 0],[4 4 2 2 -2 -2 -4 -4 -2 -2 2 2 4],'linewidth',2)
69
Removed:
70
Removed:
wing_scripts/get_dp.m
@@ -1,4 +0,0 @@
1
Removed:
function z = get_dp(xDist,zDist,Vx,Vz,Ix,Iz,Ixz,A)
2
Removed:
3
Removed:
denom = (Ix*Iz-Ixz^2);
4
Removed:
z = -A*xDist*(Ix*Vx-Ixz*Vz)/denom - A*zDist*(Iz*Vz-Ixz*Vx)/denom;
wing_scripts/get_ds.m
@@ -1,20 +0,0 @@
1
Removed:
function ds = get_ds(xi,xf,u)
2
Removed:
3
Removed:
dist = 0;
4
Removed:
numSteps = 10;
5
Removed:
dx = (xf-xi)/numSteps;
6
Removed:
z0 = get_z(xi,u);
7
Removed:
x0 = xi;
8
Removed:
for i=1:10
9
Removed:
tempX = x0+dx;
10
Removed:
if tempX > 0
11
Removed:
tempZ = get_z(tempX,u);
12
Removed:
else
13
Removed:
tempZ = 0;
14
Removed:
end
15
Removed:
dist = dist + (dx^2+(tempZ-z0)^2)^.5;
16
Removed:
z0 = tempZ;
17
Removed:
x0 = tempX;
18
Removed:
end
19
Removed:
20
Removed:
ds =dist;
wing_scripts/get_int.m
@@ -1,35 +0,0 @@
1
Removed:
function z = get_int(xi,xf,u)
2
Removed:
3
Removed:
M = 0.02;
4
Removed:
P = 0.4;
5
Removed:
T = 0.12;
6
Removed:
a0 = 0.2969;
7
Removed:
a1 = -0.126;
8
Removed:
a2 = -0.3516;
9
Removed:
a3 = 0.2843;
10
Removed:
a4 = -0.1015;
11
Removed:
12
Removed:
13
Removed:
%evaluate the integral of camber line, depending on xi and xf related to P
14
Removed:
15
Removed:
if xf <P
16
Removed:
intCamb = M/P^2*(2*P*xf^2/2 - xf^3/3) - M/P^2*(2*P*xi^2/2 - xi^3/3);
17
Removed:
elseif xi<P
18
Removed:
intCamb = (M/(1-P)^2)*((1 - 2*P)*xf +2*P*xf^2/2 - xf^3/3) - (M/(1-P)^2)*((1 - 2*P)*P +2*P*P^2/2 - P^3/3);
19
Removed:
intCamb = intCamb + M/P^2*(2*P*P^2/2 - P^3/3) - M/P^2*(2*P*xi^2/2 - xi^3/3);
20
Removed:
else
21
Removed:
intCamb = (M/(1-P)^2)*((1 - 2*P)*xf +2*P*xf^2/2 - xf^3/3) - (M/(1-P)^2)*((1 - 2*P)*xi +2*P*xi^2/2 - xi^3/3);
22
Removed:
end
23
Removed:
24
Removed:
% do integral on thickness line
25
Removed:
%z_thickness = (T/0.2)*(a0*x^.5+a1*x+a2*x^2+a3*x^3+a4*x^4);
26
Removed:
27
Removed:
intThickness = (T/0.2)*(a0*xf^1.5/1.5 + a1*xf^2/2 + a2*xf^3/3 + a3*xf^4/4 +a4*xf^5/5);
28
Removed:
intThickness = intThickness - (T/0.2)*(a0*xi^1.5/1.5 + a1*xi^2/2 + a2*xi^3/3 + a3*xi^4/4 +a4*xi^5/5);
29
Removed:
30
Removed:
% combine both integral results to get total integral
31
Removed:
if u == 1
32
Removed:
z = intCamb + intThickness;
33
Removed:
else
34
Removed:
z = abs(intCamb - intThickness);
35
Removed:
end
wing_scripts/get_z.m
@@ -1,34 +0,0 @@
1
Removed:
function z = get_z(x,u)
2
Removed:
3
Removed:
4
Removed:
5
Removed:
if (x < 0 )
6
Removed:
disp('invalid X')
7
Removed:
end
8
Removed:
9
Removed:
M = 0.02;
10
Removed:
P = 0.4;
11
Removed:
T = 0.12;
12
Removed:
a0 = 0.2969;
13
Removed:
a1 = -0.126;
14
Removed:
a2 = -0.3516;
15
Removed:
a3 = 0.2843;
16
Removed:
a4 = -0.1015;
17
Removed:
18
Removed:
if x <P
19
Removed:
z_camber = M/P^2*(2*P*x - x^2);
20
Removed:
else
21
Removed:
z_camber = (M/(1-P)^2)*(1 - 2*P +2*P*x - x^2);
22
Removed:
end
23
Removed:
24
Removed:
%z_camber = M/P^2*(2*P*x - x^2);
25
Removed:
z_thickness = (T/0.2)*(a0*x^.5+a1*x+a2*x^2+a3*x^3+a4*x^4);
26
Removed:
27
Removed:
if u==1
28
Removed:
z = z_camber + z_thickness;
29
Removed:
else
30
Removed:
z = z_camber - z_thickness;
31
Removed:
end
32
Removed:
33
Removed:
34
Removed:
wing_scripts/my_progress.m
@@ -1,459 +0,0 @@
1
Removed:
%wing shear flow
2
Removed:
clear all;
3
Removed:
close all;
4
Removed:
5
Removed:
Vx = 1; Vz = 1; My = 1; %test loads will be applied individually
6
Removed:
7
Removed:
8
Removed:
%Ixz = -Ixz;
9
Removed:
10
Removed:
%define webs
11
Removed:
12
Removed:
%% web cell 1
13
Removed:
14
Removed:
%upper webs
15
Removed:
numStringers = numTopStringers;
16
Removed:
stringerGap = upperStringerGap;
17
Removed:
webThickness = t_upper;
18
Removed:
tempStringers = topStringers;
19
Removed:
20
Removed:
for i=1:(numStringers+1)
21
Removed:
web(i).xStart = sparCaps(1).posX + stringerGap*(i-1);
22
Removed:
web(i).xEnd = sparCaps(1).posX + stringerGap*(i);
23
Removed:
web(i).thickness = webThickness;
24
Removed:
web(i).zStart = get_z(web(i).xStart/chord,1)*chord;
25
Removed:
web(i).zEnd = get_z(web(i).xEnd/chord,1)*chord;
26
Removed:
if i==1
27
Removed:
web(i).dp_area = sparCaps(1).area;
28
Removed:
web(i).dP_X = 0;
29
Removed:
web(i).dP_Z = 0;
30
Removed:
web(i).qPrime_X = 0;
31
Removed:
web(i).qPrime_Z = 0;
32
Removed:
else
33
Removed:
web(i).dp_area = tempStringers(i-1).area;
34
Removed:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;
35
Removed:
web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area); %just Vx
36
Removed:
web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area); %just Vz
37
Removed:
web(i).qPrime_X = web(i-1).qPrime_X - web(i).dP_X;
38
Removed:
web(i).qPrime_Z = web(i-1).qPrime_Z - web(i).dP_Z;
39
Removed:
end
40
Removed:
tempInt = get_int(web(i).xStart/chord,web(i).xEnd/chord,1)*chord^2; %integral of airfoil function
41
Removed:
triangle1 = abs( (web(i).xStart - sparCaps(1).posX)*web(i).zStart/2);
42
Removed:
triangle2 = abs((web(i).xEnd - sparCaps(1).posX)*web(i).zEnd/2);
43
Removed:
web(i).Area = tempInt + triangle1 - triangle2;
44
Removed:
web(i).ds = get_ds(web(i).xStart/chord,web(i).xEnd/chord,1)*chord;
45
Removed:
web(i).dS_over_t = web(i).ds / web(i).thickness;
46
Removed:
47
Removed:
web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t;
48
Removed:
web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t;
49
Removed:
web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X;
50
Removed:
web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z;
51
Removed:
web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart);
52
Removed:
web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart);
53
Removed:
web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart);
54
Removed:
web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart);
55
Removed:
end
56
Removed:
webTop = web;
57
Removed:
web = [];
58
Removed:
59
Removed:
%rear spar
60
Removed:
i=1;
61
Removed:
web(i).xStart = sparCaps(3).posX;
62
Removed:
web(i).xEnd = sparCaps(4).posX;
63
Removed:
web(i).thickness = t_rearSpar;
64
Removed:
web(i).zStart = sparCaps(3).posZ;
65
Removed:
web(i).zEnd = sparCaps(4).posZ;
66
Removed:
web(i).dp_area = sparCaps(3).area;
67
Removed:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;
68
Removed:
web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area);
69
Removed:
web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area);
70
Removed:
web(i).qPrime_X = webTop(numTopStringers+1).qPrime_X - web(i).dP_X;
71
Removed:
web(i).qPrime_Z = webTop(numTopStringers+1).qPrime_Z - web(i).dP_Z;
72
Removed:
73
Removed:
web(i).Area = (sparCaps(3).posX-sparCaps(1).posX)*sparCaps(3).posZ/2 + ...
74
Removed:
abs((sparCaps(3).posX-sparCaps(1).posX)*sparCaps(4).posZ/2);
75
Removed:
web(i).ds = abs(sparCaps(3).posZ - sparCaps(4).posZ);
76
Removed:
web(i).dS_over_t = web(i).ds / web(i).thickness;
77
Removed:
78
Removed:
web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t;
79
Removed:
web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t;
80
Removed:
web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X;
81
Removed:
web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z;
82
Removed:
web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart);
83
Removed:
web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart);
84
Removed:
web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart);
85
Removed:
web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart);
86
Removed:
87
Removed:
webRearSpar = web;
88
Removed:
web = [];
89
Removed:
90
Removed:
91
Removed:
%lower webs
92
Removed:
numStringers = numBottomStringers;
93
Removed:
stringerGap = lowerStringerGap;
94
Removed:
webThickness = t_lower;
95
Removed:
tempStringers = bottomStringers;
96
Removed:
97
Removed:
for i=1:(numStringers+1)
98
Removed:
web(i).xStart = sparCaps(4).posX - stringerGap*(i-1);
99
Removed:
web(i).xEnd = sparCaps(4).posX - stringerGap*(i);
100
Removed:
web(i).thickness = webThickness;
101
Removed:
web(i).zStart = get_z(web(i).xStart/chord,0)*chord;
102
Removed:
web(i).zEnd = get_z(web(i).xEnd/chord,0)*chord;
103
Removed:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;
104
Removed:
if i==1
105
Removed:
web(i).dp_area = sparCaps(4).area;
106
Removed:
web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area);
107
Removed:
web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area);
108
Removed:
web(i).qPrime_X = webRearSpar.qPrime_X - web(i).dP_X;
109
Removed:
web(i).qPrime_Z = webRearSpar.qPrime_Z - web(i).dP_Z;
110
Removed:
else
111
Removed:
web(i).dp_area = tempStringers(i-1).area;
112
Removed:
web(i).dP_X = get_dp(dx,dz, Vx,0,Ix,Iz,Ixz,web(i).dp_area);
113
Removed:
web(i).dP_Z = get_dp(dx,dz, 0,Vz,Ix,Iz,Ixz,web(i).dp_area);
114
Removed:
web(i).qPrime_X = web(i-1).qPrime_X - web(i).dP_X;
115
Removed:
web(i).qPrime_Z = web(i-1).qPrime_Z - web(i).dP_Z;
116
Removed:
end
117
Removed:
118
Removed:
tempInt = get_int(web(i).xEnd/chord,web(i).xStart/chord,0)*chord^2; %integral of airfoil function
119
Removed:
triangle2 = abs((web(i).xStart - sparCaps(1).posX)*web(i).zStart/2);
120
Removed:
triangle1 = abs((web(i).xEnd - sparCaps(1).posX)*web(i).zEnd/2);
121
Removed:
web(i).Area = tempInt + triangle1 - triangle2;
122
Removed:
web(i).ds = get_ds(web(i).xStart/chord,web(i).xEnd/chord,0)*chord;
123
Removed:
web(i).dS_over_t = web(i).ds / web(i).thickness;
124
Removed:
125
Removed:
web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t;
126
Removed:
web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t;
127
Removed:
web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X;
128
Removed:
web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z;
129
Removed:
web(i).qp_dx_X = web(i).qPrime_X*(web(i).xEnd-web(i).xStart);
130
Removed:
web(i).qp_dx_Z = web(i).qPrime_Z*(web(i).xEnd-web(i).xStart);
131
Removed:
web(i).qp_dz_X = web(i).qPrime_X*(web(i).zEnd-web(i).zStart);
132
Removed:
web(i).qp_dz_Z = web(i).qPrime_Z*(web(i).zEnd-web(i).zStart);
133
Removed:
134
Removed:
%web(i).radCurv = ... Example: get_curve(web(i).xStart,web(i).xEnd,1)
135
Removed:
end
136
Removed:
webBottom = web;
137
Removed:
web = [];
138
Removed:
139
Removed:
%front Spar
140
Removed:
i=1;
141
Removed:
web(i).xStart = sparCaps(2).posX;
142
Removed:
web(i).xEnd = sparCaps(1).posX;
143
Removed:
web(i).thickness = t_frontSpar;
144
Removed:
web(i).zStart = sparCaps(2).posZ;
145
Removed:
web(i).zEnd = sparCaps(1).posZ;
146
Removed:
web(i).dp_area = sparCaps(2).area;
147
Removed:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;
148
Removed:
web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area);
149
Removed:
web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area);
150
Removed:
web(i).qPrime_X = webBottom(numBottomStringers+1).qPrime_X - web(i).dP_X;
151
Removed:
web(i).qPrime_Z = webBottom(numBottomStringers+1).qPrime_Z - web(i).dP_Z;
152
Removed:
web(i).Area = 0;
153
Removed:
web(i).ds = abs(sparCaps(2).posZ - sparCaps(1).posZ);
154
Removed:
web(i).dS_over_t = web(i).ds / web(i).thickness;
155
Removed:
156
Removed:
web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t;
157
Removed:
web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t;
158
Removed:
web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X;
159
Removed:
web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z;
160
Removed:
web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart);
161
Removed:
web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart);
162
Removed:
web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart);
163
Removed:
web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart);
164
Removed:
165
Removed:
webFrontSpar = web;
166
Removed:
web = [];
167
Removed:
168
Removed:
169
Removed:
170
Removed:
171
Removed:
%% web cell 2
172
Removed:
173
Removed:
%lower nose webs
174
Removed:
numStringers = numNoseBottomStringers;
175
Removed:
stringerGap = lowerNoseStringerGap;
176
Removed:
webThickness = t_lower_front;
177
Removed:
tempStringers = noseBottomStringers;
178
Removed:
179
Removed:
for i=1:(numStringers+1)
180
Removed:
web(i).xStart = sparCaps(2).posX - stringerGap*(i-1);
181
Removed:
web(i).xEnd = sparCaps(2).posX - stringerGap*(i);
182
Removed:
web(i).thickness = webThickness;
183
Removed:
web(i).zStart = get_z(web(i).xStart/chord,0)*chord;
184
Removed:
web(i).zEnd = get_z(web(i).xEnd/chord,0)*chord;
185
Removed:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;
186
Removed:
187
Removed:
if i==1
188
Removed:
web(i).dp_area = sparCaps(2).area;
189
Removed:
web(i).dP_X = 0;
190
Removed:
web(i).dP_Z = 0;
191
Removed:
web(i).qPrime_X = 0;
192
Removed:
web(i).qPrime_Z = 0;
193
Removed:
else
194
Removed:
web(i).dp_area = tempStringers(i-1).area;
195
Removed:
web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area);
196
Removed:
web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area);
197
Removed:
web(i).qPrime_X = web(i-1).qPrime_X - web(i).dP_X;
198
Removed:
web(i).qPrime_Z = web(i-1).qPrime_Z - web(i).dP_Z;
199
Removed:
end
200
Removed:
tempInt = get_int(web(i).xEnd/chord,web(i).xStart/chord,0)*chord^2; %integral of airfoil function
201
Removed:
triangle1 = abs((web(i).xStart - sparCaps(2).posX)*web(i).zStart/2);
202
Removed:
triangle2 = abs((web(i).xEnd - sparCaps(2).posX)*web(i).zEnd/2);
203
Removed:
web(i).Area = tempInt + triangle1 - triangle2;
204
Removed:
web(i).ds = get_ds(web(i).xStart/chord,web(i).xEnd/chord,0)*chord;
205
Removed:
web(i).dS_over_t = web(i).ds / web(i).thickness;
206
Removed:
207
Removed:
web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t;
208
Removed:
web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t;
209
Removed:
web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X;
210
Removed:
web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z;
211
Removed:
web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart);
212
Removed:
web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart);
213
Removed:
web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart);
214
Removed:
web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart);
215
Removed:
216
Removed:
%web(i).radCurv = ... Example: get_curve(web(i).xStart,web(i).xEnd,1)
217
Removed:
end
218
Removed:
webLowerNose = web;
219
Removed:
web = [];
220
Removed:
221
Removed:
%upper nose webs
222
Removed:
numStringers = numNoseTopStringers;
223
Removed:
stringerGap = upperNoseStringerGap;
224
Removed:
webThickness = t_upper_front;
225
Removed:
tempStringers = noseTopStringers;
226
Removed:
227
Removed:
for i=1:(numStringers+1)
228
Removed:
web(i).xStart = stringerGap*(i-1);
229
Removed:
web(i).xEnd = stringerGap*(i);
230
Removed:
web(i).thickness = webThickness;
231
Removed:
web(i).zStart = get_z(web(i).xStart/chord,1)*chord;
232
Removed:
web(i).zEnd = get_z(web(i).xEnd/chord,1)*chord;
233
Removed:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;
234
Removed:
if i==1
235
Removed:
web(i).dp_area = 0;
236
Removed:
web(i).dP_X = 0;
237
Removed:
web(i).dP_Z = 0;
238
Removed:
web(i).qPrime_X = webLowerNose(numNoseBottomStringers+1).qPrime_X - web(i).dP_X;
239
Removed:
web(i).qPrime_Z = webLowerNose(numNoseBottomStringers+1).qPrime_Z - web(i).dP_Z;
240
Removed:
else
241
Removed:
web(i).dp_area = tempStringers(i-1).area;
242
Removed:
web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area);
243
Removed:
web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area);
244
Removed:
web(i).qPrime_X = web(i-1).qPrime_X - web(i).dP_X;
245
Removed:
web(i).qPrime_Z = web(i-1).qPrime_Z - web(i).dP_Z;
246
Removed:
end
247
Removed:
tempInt = get_int(web(i).xStart/chord,web(i).xEnd/chord,1)*chord^2; %integral of airfoil function
248
Removed:
triangle2 = abs((web(i).xStart - sparCaps(2).posX)*web(i).zStart/2);
249
Removed:
triangle1 = abs((web(i).xEnd - sparCaps(2).posX)*web(i).zEnd/2);
250
Removed:
web(i).Area = tempInt + triangle1 - triangle2;
251
Removed:
web(i).ds = get_ds(web(i).xStart/chord,web(i).xEnd/chord,1)*chord;
252
Removed:
web(i).dS_over_t = web(i).ds / web(i).thickness;
253
Removed:
254
Removed:
web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t;
255
Removed:
web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t;
256
Removed:
web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X;
257
Removed:
web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z;
258
Removed:
web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart);
259
Removed:
web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart);
260
Removed:
web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart);
261
Removed:
web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart);
262
Removed:
263
Removed:
end
264
Removed:
webUpperNose = web;
265
Removed:
web = [];
266
Removed:
267
Removed:
268
Removed:
%front Spar
269
Removed:
i=1;
270
Removed:
web(i).xStart = sparCaps(1).posX;
271
Removed:
web(i).xEnd = sparCaps(2).posX;
272
Removed:
web(i).thickness = t_frontSpar;
273
Removed:
web(i).zStart = sparCaps(1).posZ;
274
Removed:
web(i).zEnd = sparCaps(2).posZ;
275
Removed:
web(i).dp_area = sparCaps(1).area;
276
Removed:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;
277
Removed:
278
Removed:
web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area);
279
Removed:
web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area);
280
Removed:
web(i).qPrime_X = webUpperNose(numNoseTopStringers+1).qPrime_X - web(i).dP_X;
281
Removed:
web(i).qPrime_Z = webUpperNose(numNoseTopStringers+1).qPrime_Z - web(i).dP_Z;
282
Removed:
web(i).Area = 0;
283
Removed:
web(i).ds = abs(sparCaps(1).posZ - sparCaps(2).posZ);
284
Removed:
web(i).dS_over_t = web(i).ds / web(i).thickness;
285
Removed:
web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t;
286
Removed:
web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t;
287
Removed:
web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X;
288
Removed:
web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z;
289
Removed:
web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart);
290
Removed:
web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart);
291
Removed:
web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart);
292
Removed:
web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart);
293
Removed:
294
Removed:
webFrontSparCell2 = web;
295
Removed:
web = [];
296
Removed:
297
Removed:
298
Removed:
%check that q'*dx sums up to Vx
299
Removed:
300
Removed:
Fx = sum([webTop.qp_dx_X])+webRearSpar.qp_dx_X+ sum([webBottom.qp_dx_X])+webFrontSpar.qp_dx_X; %cell 1
301
Removed:
Fx = Fx + sum([webLowerNose.qp_dx_X])+ sum([webUpperNose.qp_dx_X]); %cell 2
302
Removed:
Fx
303
Removed:
Fz = sum([webTop.qp_dz_X])+webRearSpar.qp_dz_X+ sum([webBottom.qp_dz_X])+webFrontSpar.qp_dz_X; %cell 1
304
Removed:
Fz = Fz + sum([webLowerNose.qp_dz_X])+ sum([webUpperNose.qp_dz_X]); %cell 2
305
Removed:
Fz
306
Removed:
307
Removed:
%check that q'*dz sums up to Vz
308
Removed:
309
Removed:
310
Removed:
Fx = sum([webTop.qp_dx_Z])+webRearSpar.qp_dx_Z+ sum([webBottom.qp_dx_Z])+webFrontSpar.qp_dx_Z; %cell 1
311
Removed:
Fx = Fx + sum([webLowerNose.qp_dx_Z])+ sum([webUpperNose.qp_dx_Z]); %cell 2
312
Removed:
Fx
313
Removed:
Fz = sum([webTop.qp_dz_Z])+webRearSpar.qp_dz_Z+ sum([webBottom.qp_dz_Z])+webFrontSpar.qp_dz_Z; %cell 1
314
Removed:
Fz = Fz + sum([webLowerNose.qp_dz_Z])+ sum([webUpperNose.qp_dz_Z]); %cell 2
315
Removed:
Fz
316
Removed:
317
Removed:
%%
318
Removed:
319
Removed:
% sum up the ds/t and q*ds/t to solve 2 equations, 2 unknowns
320
Removed:
321
Removed:
% [A]*[q1s q2s] = B
322
Removed:
323
Removed:
A11 = sum([webTop.dS_over_t])+webRearSpar.dS_over_t+ sum([webBottom.dS_over_t])+webFrontSpar.dS_over_t;
324
Removed:
A22 = sum([webLowerNose.dS_over_t])+ sum([webUpperNose.dS_over_t])+webFrontSparCell2.dS_over_t;
325
Removed:
A12 = -webFrontSpar.dS_over_t;
326
Removed:
A21 = -webFrontSparCell2.dS_over_t;
327
Removed:
328
Removed:
B1_X = sum([webTop.q_dS_over_t_X])+webRearSpar.q_dS_over_t_X+ sum([webBottom.q_dS_over_t_X])+webFrontSpar.q_dS_over_t_X;
329
Removed:
B2_X = sum([webLowerNose.q_dS_over_t_X])+ sum([webUpperNose.q_dS_over_t_X])+webFrontSparCell2.q_dS_over_t_X;
330
Removed:
B1_Z = sum([webTop.q_dS_over_t_Z])+webRearSpar.q_dS_over_t_Z+ sum([webBottom.q_dS_over_t_Z])+webFrontSpar.q_dS_over_t_Z;
331
Removed:
B2_Z = sum([webLowerNose.q_dS_over_t_Z])+ sum([webUpperNose.q_dS_over_t_Z])+webFrontSparCell2.q_dS_over_t_Z;
332
Removed:
333
Removed:
Amat = [A11 A12; A21 A22];
334
Removed:
Bmat_X = -[B1_X;B2_X];
335
Removed:
Bmat_Z = -[B1_Z;B2_Z];
336
Removed:
337
Removed:
qs_X = inv(Amat)*Bmat_X;
338
Removed:
qs_Z = inv(Amat)*Bmat_Z;
339
Removed:
340
Removed:
341
Removed:
342
Removed:
sum_2_a_q_X = sum([webTop.two_A_qprime_X])+webRearSpar.two_A_qprime_X+ sum([webBottom.two_A_qprime_X]); %cell 1 qprimes
343
Removed:
sum_2_a_q_X = sum_2_a_q_X + sum([webLowerNose.two_A_qprime_X])+ sum([webUpperNose.two_A_qprime_X]); %cell 2 qprimes
344
Removed:
sum_2_a_q_X = sum_2_a_q_X + 2*qs_X(1)*(sum([webTop.Area])+webRearSpar.Area+ sum([webBottom.Area]));
345
Removed:
sum_2_a_q_X = sum_2_a_q_X + 2*qs_X(2)*(sum([webLowerNose.Area])+ sum([webUpperNose.Area]));
346
Removed:
347
Removed:
sum_2_a_q_Z = sum([webTop.two_A_qprime_Z])+webRearSpar.two_A_qprime_Z+ sum([webBottom.two_A_qprime_Z]); %cell 1 qprimes
348
Removed:
sum_2_a_q_Z = sum_2_a_q_Z + sum([webLowerNose.two_A_qprime_Z])+ sum([webUpperNose.two_A_qprime_Z]); %cell 2 qprimes
349
Removed:
sum_2_a_q_Z = sum_2_a_q_Z + 2*qs_Z(1)*(sum([webTop.Area])+webRearSpar.Area+ sum([webBottom.Area]));
350
Removed:
sum_2_a_q_Z = sum_2_a_q_Z + 2*qs_Z(2)*(sum([webLowerNose.Area])+ sum([webUpperNose.Area]));
351
Removed:
352
Removed:
%shear center
353
Removed:
sc.posX = sum_2_a_q_Z / Vz + frontSpar*chord;
354
Removed:
sc.posZ = - sum_2_a_q_X / Vx;
355
Removed:
356
Removed:
357
Removed:
% now consider the torque representing shifting the load from the quarter
358
Removed:
% chord to the SC (need to check signs on these moments)
359
Removed:
360
Removed:
torque_Z = Vz*(sc.posX - 0.25*chord);
361
Removed:
torque_X = -Vx*sc.posZ;
362
Removed:
363
Removed:
364
Removed:
Area1 = sum([webTop.Area]) + webRearSpar.Area + sum([webBottom.Area]);
365
Removed:
%check area
366
Removed:
Area1_check = get_int(frontSpar,backSpar,1)*chord^2 + get_int(frontSpar,backSpar,0)*chord^2;
367
Removed:
368
Removed:
Area2 = sum([webLowerNose.Area]) + sum([webUpperNose.Area]);
369
Removed:
Area2_check = get_int(0,frontSpar,1)*chord^2 + get_int(0,frontSpar,0)*chord^2;
370
Removed:
371
Removed:
372
Removed:
%for twist equation (see excel spreadsheet example)
373
Removed:
374
Removed:
q1t_over_q2t = (A22/Area2 + webFrontSpar.dS_over_t/Area1)/(A11/Area1 + webFrontSpar.dS_over_t/Area2);
375
Removed:
376
Removed:
q2t = torque_X/(2*Area1*q1t_over_q2t + 2*Area2);
377
Removed:
q1t = q2t*q1t_over_q2t;
378
Removed:
qt_X = [q1t;q2t];
379
Removed:
380
Removed:
q2t = torque_Z/(2*Area1*q1t_over_q2t + 2*Area2);
381
Removed:
q1t = q2t*q1t_over_q2t;
382
Removed:
qt_Z = [q1t;q2t];
383
Removed:
384
Removed:
385
Removed:
386
Removed:
% --- - add up all shear flows: qtot = (qPrime + qs) + qt
387
Removed:
388
Removed:
389
Removed:
390
Removed:
391
Removed:
%--- insert force balance to check total shear flows ---
392
Removed:
393
Removed:
% --- --
394
Removed:
395
Removed:
396
Removed:
%end
397
Removed:
398
Removed:
sc
399
Removed:
400
Removed:
401
Removed:
%plotting airfoil cross-section
402
Removed:
403
Removed:
xChord = 0:.01:1;
404
Removed:
xChord = xChord*chord;
405
Removed:
upperSurface = zeros(1,length(xChord));
406
Removed:
lowerSurface = zeros(1,length(xChord));
407
Removed:
408
Removed:
for i=1:length(xChord)
409
Removed:
upperSurface(i) = get_z(xChord(i)/chord,1)*chord;
410
Removed:
lowerSurface(i) = get_z(xChord(i)/chord,0)*chord;
411
Removed:
end
412
Removed:
413
Removed:
figure; hold on; axis equal; grid on;
414
Removed:
%plot(xChord,z_camber,'-')
415
Removed:
plot(xChord,upperSurface,'-k','linewidth',2)
416
Removed:
plot(xChord,lowerSurface,'-k','linewidth',2)
417
Removed:
plot([0 1],[0 0],'--k','linewidth',1)
418
Removed:
419
Removed:
420
Removed:
for i = 1:length(webTop)
421
Removed:
vecX = [frontSpar*chord webTop(i).xStart webTop(i).xEnd];
422
Removed:
vecZ = [0 webTop(i).zStart webTop(i).zEnd];
423
Removed:
fill(vecX,vecZ,[0.9 0.9 0.9])
424
Removed:
end
425
Removed:
426
Removed:
for i = 1:length(webBottom)
427
Removed:
vecX = [frontSpar*chord webBottom(i).xStart webBottom(i).xEnd];
428
Removed:
vecZ = [0 webBottom(i).zStart webBottom(i).zEnd];
429
Removed:
fill(vecX,vecZ,[0.9 0.9 0.9])
430
Removed:
end
431
Removed:
432
Removed:
for i = 1:length(webUpperNose)
433
Removed:
vecX = [frontSpar*chord webUpperNose(i).xStart webUpperNose(i).xEnd];
434
Removed:
vecZ = [0 webUpperNose(i).zStart webUpperNose(i).zEnd];
435
Removed:
fill(vecX,vecZ,[0.7 0.9 1.0])
436
Removed:
end
437
Removed:
438
Removed:
for i = 1:length(webLowerNose)
439
Removed:
vecX = [frontSpar*chord webLowerNose(i).xStart webLowerNose(i).xEnd];
440
Removed:
vecZ = [0 webLowerNose(i).zStart webLowerNose(i).zEnd];
441
Removed:
fill(vecX,vecZ,[0.7 0.9 1.0])
442
Removed:
end
443
Removed:
444
Removed:
vecX = [frontSpar*chord sparCaps(3).posX sparCaps(4).posX];
445
Removed:
vecZ = [0 sparCaps(3).posZ sparCaps(4).posZ];
446
Removed:
fill(vecX,vecZ,[0.9 0.9 0.9])
447
Removed:
448
Removed:
449
Removed:
sparCapSize = 18;
450
Removed:
stringerSize = 18;
451
Removed:
plot([sparCaps(1).posX sparCaps(2).posX],[sparCaps(1).posZ sparCaps(2).posZ],'-k','linewidth',2)
452
Removed:
plot([sparCaps(3).posX sparCaps(4).posX],[sparCaps(3).posZ sparCaps(4).posZ],'-k','linewidth',2)
453
Removed:
plot([sparCaps.posX],[sparCaps.posZ],'.b','markersize',sparCapSize)
454
Removed:
plot([topStringers.posX],[topStringers.posZ],'.r','markersize',stringerSize)
455
Removed:
plot([bottomStringers.posX],[bottomStringers.posZ],'.r','markersize',stringerSize)
456
Removed:
plot([noseTopStringers.posX],[noseTopStringers.posZ],'.r','markersize',stringerSize)
457
Removed:
plot([noseBottomStringers.posX],[noseBottomStringers.posZ],'.r','markersize',stringerSize)
458
Removed:
plot(centroid.posX,centroid.posZ,'.k','markerSize',18)
459
Removed:
plot(sc.posX,sc.posZ,'.g','markersize',18)
wing_scripts/stringersBeamExample.m
@@ -1,47 +0,0 @@
1
Removed:
close all;
2
Removed:
force = 8000; % lbs
3
Removed:
stringer_A = 0.5; % in^2
4
Removed:
thickness = 0.04; % in
5
Removed:
6
Removed:
top_stringers_y = 6; % in
7
Removed:
middle_stringers_y = 2; % in
8
Removed:
9
Removed:
I = 2*stringer_A*top_stringers_y^2 + 2*stringer_A*middle_stringers_y^2;
10
Removed:
11
Removed:
% solve for shear stress distribution. this calc ignores the thickness of
12
Removed:
% the web between teh stringers (assumes bending taken by stringers)
13
Removed:
% V / (I * t) * int(y*da)
14
Removed:
15
Removed:
shear_top_web = force / (I*thickness) * top_stringers_y * stringer_A;
16
Removed:
shear_middle_web = shear_top_web + (force / (I*thickness) * middle_stringers_y * stringer_A);
17
Removed:
18
Removed:
figure; grid on; hold on;set(gcf,'color',[1 1 1]);
19
Removed:
20
Removed:
21
Removed:
plot([shear_top_web shear_top_web],[middle_stringers_y top_stringers_y],'linewidth',2);
22
Removed:
plot([shear_middle_web shear_middle_web],[-middle_stringers_y middle_stringers_y],'linewidth',2);
23
Removed:
plot([shear_top_web shear_top_web],[-middle_stringers_y -top_stringers_y],'linewidth',2);
24
Removed:
25
Removed:
plot([0 shear_top_web],[top_stringers_y top_stringers_y],'linewidth',2);
26
Removed:
plot([0 shear_top_web],[-top_stringers_y -top_stringers_y],'linewidth',2);
27
Removed:
plot([shear_middle_web shear_top_web],[middle_stringers_y middle_stringers_y],'linewidth',2);
28
Removed:
plot([shear_middle_web shear_top_web],[-middle_stringers_y -middle_stringers_y],'linewidth',2);
29
Removed:
xlabel('shear stress (lb/in^2)','fontsize',16,'fontweight','bold');ylabel('Distance from Center (in)','fontsize',16,'fontweight','bold')
30
Removed:
set(gca,'FontSize',16,'fontweight','bold');
31
Removed:
32
Removed:
%Alternate approach.. compute change in bending stress at each stringer to
33
Removed:
%find the change in shear load
34
Removed:
35
Removed:
%at top stringer
36
Removed:
d_sigma = force * top_stringers_y / I; %(lbs/in^2)
37
Removed:
d_force_top = d_sigma * stringer_A;
38
Removed:
39
Removed:
%at middle stringer..
40
Removed:
d_sigma = force * middle_stringers_y / I; %(lbs/in^2)
41
Removed:
d_force_middle = d_force_top + d_sigma*stringer_A;
42
Removed:
43
Removed:
%check if load balances
44
Removed:
check_load = 2*d_force_top*4 + d_force_middle*4;
45
Removed:
46
Removed:
47
Removed:
wing_scripts/wingAnalysis_190422.m
@@ -1,579 +0,0 @@
1
Removed:
%wing shear flow
2
Removed:
clear all;
3
Removed:
close all;
4
Removed:
5
Removed:
6
Removed:
7
Removed:
8
Removed:
Vx = 1; Vz = 1; My = 1; %test loads will be applied individually
9
Removed:
10
Removed:
%define a few
11
Removed:
numTopStringers = 6;
12
Removed:
numBottomStringers = 8;
13
Removed:
numNoseTopStringers = 4;
14
Removed:
numNoseBottomStringers = 4;
15
Removed:
16
Removed:
t_upper = 0.02/12;
17
Removed:
t_lower = 0.02/12;
18
Removed:
t_upper_front = 0.02/12;
19
Removed:
t_lower_front = 0.02/12;
20
Removed:
t_frontSpar = 0.04/12;
21
Removed:
t_rearSpar = 0.04/12;
22
Removed:
23
Removed:
frontSpar = 0.2;
24
Removed:
backSpar = 0.7;
25
Removed:
chord = 5;
26
Removed:
27
Removed:
sparCaps(1).posX = frontSpar*chord;
28
Removed:
sparCaps(2).posX = frontSpar*chord;
29
Removed:
sparCaps(3).posX = backSpar*chord;
30
Removed:
sparCaps(4).posX = backSpar*chord;
31
Removed:
32
Removed:
sparCaps(1).posZ = get_z(frontSpar,1)*chord;
33
Removed:
sparCaps(2).posZ = get_z(frontSpar,0)*chord;
34
Removed:
sparCaps(3).posZ = get_z(backSpar,1)*chord;
35
Removed:
sparCaps(4).posZ = get_z(backSpar,0)*chord;
36
Removed:
37
Removed:
sparCaps(1).area = .1;
38
Removed:
sparCaps(2).area = .1;
39
Removed:
sparCaps(3).area = .1;
40
Removed:
sparCaps(4).area = .1;
41
Removed:
42
Removed:
upperStringerGap = (sparCaps(3).posX - sparCaps(1).posX)/(numTopStringers + 1);
43
Removed:
lowerStringerGap = (sparCaps(3).posX - sparCaps(1).posX)/(numBottomStringers + 1);
44
Removed:
upperNoseStringerGap = (sparCaps(1).posX - 0)/(numNoseTopStringers + 1);
45
Removed:
lowerNoseStringerGap = (sparCaps(1).posX - 0)/(numNoseBottomStringers + 1);
46
Removed:
47
Removed:
48
Removed:
%set stringers spaced evenly along X axis betwen Spars
49
Removed:
%top Stringers
50
Removed:
for i=1:numTopStringers
51
Removed:
topStringers(i).posX = sparCaps(1).posX + upperStringerGap*i;
52
Removed:
topStringers(i).posZ = get_z(topStringers(i).posX/chord,1)*chord;
53
Removed:
topStringers(i).area = .1;
54
Removed:
end
55
Removed:
56
Removed:
%bottom Stringers
57
Removed:
for i=1:numBottomStringers
58
Removed:
bottomStringers(i).posX = sparCaps(4).posX - lowerStringerGap*i;
59
Removed:
bottomStringers(i).posZ = get_z(bottomStringers(i).posX/chord,0)*chord;
60
Removed:
bottomStringers(i).area = .1;
61
Removed:
62
Removed:
end
63
Removed:
64
Removed:
%nose bottom Stringers
65
Removed:
for i=1:numNoseBottomStringers
66
Removed:
noseBottomStringers(i).posX = sparCaps(2).posX - lowerNoseStringerGap*i;
67
Removed:
noseBottomStringers(i).posZ = get_z(noseBottomStringers(i).posX/chord,0)*chord;
68
Removed:
noseBottomStringers(i).area = .1;
69
Removed:
end
70
Removed:
71
Removed:
%nose top Stringers
72
Removed:
for i=1:numNoseTopStringers
73
Removed:
noseTopStringers(i).posX = upperNoseStringerGap*i;
74
Removed:
noseTopStringers(i).posZ = get_z(noseTopStringers(i).posX/chord,1)*chord;
75
Removed:
noseTopStringers(i).area = .1;
76
Removed:
end
77
Removed:
78
Removed:
79
Removed:
centroid.posX = sum([sparCaps.posX].*[sparCaps.area]) + ...
80
Removed:
sum([topStringers.posX].*[topStringers.area]) + ...
81
Removed:
sum([bottomStringers.posX].*[bottomStringers.area]) + ...
82
Removed:
sum([noseTopStringers.posX].*[noseTopStringers.area]) + ...
83
Removed:
sum([noseBottomStringers.posX].*[noseBottomStringers.area]);
84
Removed:
85
Removed:
centroid.posX = centroid.posX / ( sum([sparCaps.area]) + sum([topStringers.area]) + ...
86
Removed:
sum([bottomStringers.area]) + sum([noseTopStringers.area]) + sum([noseBottomStringers.area]));
87
Removed:
88
Removed:
centroid.posZ = sum([sparCaps.posZ].*[sparCaps.area]) + ...
89
Removed:
sum([topStringers.posZ].*[topStringers.area]) + ...
90
Removed:
sum([bottomStringers.posZ].*[bottomStringers.area]) + ...
91
Removed:
sum([noseTopStringers.posZ].*[noseTopStringers.area]) + ...
92
Removed:
sum([noseBottomStringers.posZ].*[noseBottomStringers.area]);
93
Removed:
94
Removed:
centroid.posZ = centroid.posZ / ( sum([sparCaps.area]) + sum([topStringers.area]) + ...
95
Removed:
sum([bottomStringers.area]) + sum([noseTopStringers.area]) + sum([noseBottomStringers.area]));
96
Removed:
97
Removed:
%summing contributions for inertia terms
98
Removed:
Ix = 0; Iz = 0; Ixz = 0;
99
Removed:
100
Removed:
for i=1:4 %spar caps
101
Removed:
Ix = Ix + sparCaps(i).area*(sparCaps(i).posZ-centroid.posZ)^2;
102
Removed:
Iz = Iz + sparCaps(i).area*(sparCaps(i).posX-centroid.posX)^2;
103
Removed:
Ixz = Ixz + sparCaps(i).area*(sparCaps(i).posX-centroid.posX)*(sparCaps(i).posZ-centroid.posZ);
104
Removed:
end
105
Removed:
106
Removed:
107
Removed:
for i=1:numTopStringers %top stringers
108
Removed:
Ix = Ix + topStringers(i).area*(topStringers(i).posZ-centroid.posZ)^2;
109
Removed:
Iz = Iz + topStringers(i).area*(topStringers(i).posX-centroid.posX)^2;
110
Removed:
Ixz = Ixz + topStringers(i).area*(topStringers(i).posX-centroid.posX)*(topStringers(i).posZ-centroid.posZ);
111
Removed:
end
112
Removed:
for i=1:numBottomStringers %bottom stringers
113
Removed:
Ix = Ix + bottomStringers(i).area*(bottomStringers(i).posZ-centroid.posZ)^2;
114
Removed:
Iz = Iz + bottomStringers(i).area*(bottomStringers(i).posX-centroid.posX)^2;
115
Removed:
Ixz = Ixz + bottomStringers(i).area*(bottomStringers(i).posX-centroid.posX)*(bottomStringers(i).posZ-centroid.posZ);
116
Removed:
end
117
Removed:
for i=1:numNoseTopStringers %nose top stringers
118
Removed:
Ix = Ix + noseTopStringers(i).area*(noseTopStringers(i).posZ-centroid.posZ)^2;
119
Removed:
Iz = Iz + noseTopStringers(i).area*(noseTopStringers(i).posX-centroid.posX)^2;
120
Removed:
Ixz = Ixz + noseTopStringers(i).area*(noseTopStringers(i).posX-centroid.posX)*(noseTopStringers(i).posZ-centroid.posZ);
121
Removed:
end
122
Removed:
for i=1:numNoseBottomStringers %nose bottom stringers
123
Removed:
Ix = Ix + noseBottomStringers(i).area*(noseBottomStringers(i).posZ-centroid.posZ)^2;
124
Removed:
Iz = Iz + noseBottomStringers(i).area*(noseBottomStringers(i).posX-centroid.posX)^2;
125
Removed:
Ixz = Ixz + noseBottomStringers(i).area*(noseBottomStringers(i).posX-centroid.posX)*(noseBottomStringers(i).posZ-centroid.posZ);
126
Removed:
end
127
Removed:
128
Removed:
%Ixz = -Ixz;
129
Removed:
130
Removed:
%define webs
131
Removed:
132
Removed:
%% web cell 1
133
Removed:
134
Removed:
%upper webs
135
Removed:
numStringers = numTopStringers;
136
Removed:
stringerGap = upperStringerGap;
137
Removed:
webThickness = t_upper;
138
Removed:
tempStringers = topStringers;
139
Removed:
140
Removed:
for i=1:(numStringers+1)
141
Removed:
web(i).xStart = sparCaps(1).posX + stringerGap*(i-1);
142
Removed:
web(i).xEnd = sparCaps(1).posX + stringerGap*(i);
143
Removed:
web(i).thickness = webThickness;
144
Removed:
web(i).zStart = get_z(web(i).xStart/chord,1)*chord;
145
Removed:
web(i).zEnd = get_z(web(i).xEnd/chord,1)*chord;
146
Removed:
if i==1
147
Removed:
web(i).dp_area = sparCaps(1).area;
148
Removed:
web(i).dP_X = 0;
149
Removed:
web(i).dP_Z = 0;
150
Removed:
web(i).qPrime_X = 0;
151
Removed:
web(i).qPrime_Z = 0;
152
Removed:
else
153
Removed:
web(i).dp_area = tempStringers(i-1).area;
154
Removed:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;
155
Removed:
web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area); %just Vx
156
Removed:
web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area); %just Vz
157
Removed:
web(i).qPrime_X = web(i-1).qPrime_X - web(i).dP_X;
158
Removed:
web(i).qPrime_Z = web(i-1).qPrime_Z - web(i).dP_Z;
159
Removed:
end
160
Removed:
tempInt = get_int(web(i).xStart/chord,web(i).xEnd/chord,1)*chord^2; %integral of airfoil function
161
Removed:
triangle1 = abs( (web(i).xStart - sparCaps(1).posX)*web(i).zStart/2);
162
Removed:
triangle2 = abs((web(i).xEnd - sparCaps(1).posX)*web(i).zEnd/2);
163
Removed:
web(i).Area = tempInt + triangle1 - triangle2;
164
Removed:
web(i).ds = get_ds(web(i).xStart/chord,web(i).xEnd/chord,1)*chord;
165
Removed:
web(i).dS_over_t = web(i).ds / web(i).thickness;
166
Removed:
167
Removed:
web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t;
168
Removed:
web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t;
169
Removed:
web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X;
170
Removed:
web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z;
171
Removed:
web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart);
172
Removed:
web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart);
173
Removed:
web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart);
174
Removed:
web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart);
175
Removed:
end
176
Removed:
webTop = web;
177
Removed:
web = [];
178
Removed:
179
Removed:
%rear spar
180
Removed:
i=1;
181
Removed:
web(i).xStart = sparCaps(3).posX;
182
Removed:
web(i).xEnd = sparCaps(4).posX;
183
Removed:
web(i).thickness = t_rearSpar;
184
Removed:
web(i).zStart = sparCaps(3).posZ;
185
Removed:
web(i).zEnd = sparCaps(4).posZ;
186
Removed:
web(i).dp_area = sparCaps(3).area;
187
Removed:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;
188
Removed:
web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area);
189
Removed:
web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area);
190
Removed:
web(i).qPrime_X = webTop(numTopStringers+1).qPrime_X - web(i).dP_X;
191
Removed:
web(i).qPrime_Z = webTop(numTopStringers+1).qPrime_Z - web(i).dP_Z;
192
Removed:
193
Removed:
web(i).Area = (sparCaps(3).posX-sparCaps(1).posX)*sparCaps(3).posZ/2 + ...
194
Removed:
abs((sparCaps(3).posX-sparCaps(1).posX)*sparCaps(4).posZ/2);
195
Removed:
web(i).ds = abs(sparCaps(3).posZ - sparCaps(4).posZ);
196
Removed:
web(i).dS_over_t = web(i).ds / web(i).thickness;
197
Removed:
198
Removed:
web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t;
199
Removed:
web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t;
200
Removed:
web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X;
201
Removed:
web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z;
202
Removed:
web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart);
203
Removed:
web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart);
204
Removed:
web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart);
205
Removed:
web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart);
206
Removed:
207
Removed:
webRearSpar = web;
208
Removed:
web = [];
209
Removed:
210
Removed:
211
Removed:
%lower webs
212
Removed:
numStringers = numBottomStringers;
213
Removed:
stringerGap = lowerStringerGap;
214
Removed:
webThickness = t_lower;
215
Removed:
tempStringers = bottomStringers;
216
Removed:
217
Removed:
for i=1:(numStringers+1)
218
Removed:
web(i).xStart = sparCaps(4).posX - stringerGap*(i-1);
219
Removed:
web(i).xEnd = sparCaps(4).posX - stringerGap*(i);
220
Removed:
web(i).thickness = webThickness;
221
Removed:
web(i).zStart = get_z(web(i).xStart/chord,0)*chord;
222
Removed:
web(i).zEnd = get_z(web(i).xEnd/chord,0)*chord;
223
Removed:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;
224
Removed:
if i==1
225
Removed:
web(i).dp_area = sparCaps(4).area;
226
Removed:
web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area);
227
Removed:
web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area);
228
Removed:
web(i).qPrime_X = webRearSpar.qPrime_X - web(i).dP_X;
229
Removed:
web(i).qPrime_Z = webRearSpar.qPrime_Z - web(i).dP_Z;
230
Removed:
else
231
Removed:
web(i).dp_area = tempStringers(i-1).area;
232
Removed:
web(i).dP_X = get_dp(dx,dz, Vx,0,Ix,Iz,Ixz,web(i).dp_area);
233
Removed:
web(i).dP_Z = get_dp(dx,dz, 0,Vz,Ix,Iz,Ixz,web(i).dp_area);
234
Removed:
web(i).qPrime_X = web(i-1).qPrime_X - web(i).dP_X;
235
Removed:
web(i).qPrime_Z = web(i-1).qPrime_Z - web(i).dP_Z;
236
Removed:
end
237
Removed:
238
Removed:
tempInt = get_int(web(i).xEnd/chord,web(i).xStart/chord,0)*chord^2; %integral of airfoil function
239
Removed:
triangle2 = abs((web(i).xStart - sparCaps(1).posX)*web(i).zStart/2);
240
Removed:
triangle1 = abs((web(i).xEnd - sparCaps(1).posX)*web(i).zEnd/2);
241
Removed:
web(i).Area = tempInt + triangle1 - triangle2;
242
Removed:
web(i).ds = get_ds(web(i).xStart/chord,web(i).xEnd/chord,0)*chord;
243
Removed:
web(i).dS_over_t = web(i).ds / web(i).thickness;
244
Removed:
245
Removed:
web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t;
246
Removed:
web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t;
247
Removed:
web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X;
248
Removed:
web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z;
249
Removed:
web(i).qp_dx_X = web(i).qPrime_X*(web(i).xEnd-web(i).xStart);
250
Removed:
web(i).qp_dx_Z = web(i).qPrime_Z*(web(i).xEnd-web(i).xStart);
251
Removed:
web(i).qp_dz_X = web(i).qPrime_X*(web(i).zEnd-web(i).zStart);
252
Removed:
web(i).qp_dz_Z = web(i).qPrime_Z*(web(i).zEnd-web(i).zStart);
253
Removed:
254
Removed:
%web(i).radCurv = ... Example: get_curve(web(i).xStart,web(i).xEnd,1)
255
Removed:
end
256
Removed:
webBottom = web;
257
Removed:
web = [];
258
Removed:
259
Removed:
%front Spar
260
Removed:
i=1;
261
Removed:
web(i).xStart = sparCaps(2).posX;
262
Removed:
web(i).xEnd = sparCaps(1).posX;
263
Removed:
web(i).thickness = t_frontSpar;
264
Removed:
web(i).zStart = sparCaps(2).posZ;
265
Removed:
web(i).zEnd = sparCaps(1).posZ;
266
Removed:
web(i).dp_area = sparCaps(2).area;
267
Removed:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;
268
Removed:
web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area);
269
Removed:
web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area);
270
Removed:
web(i).qPrime_X = webBottom(numBottomStringers+1).qPrime_X - web(i).dP_X;
271
Removed:
web(i).qPrime_Z = webBottom(numBottomStringers+1).qPrime_Z - web(i).dP_Z;
272
Removed:
web(i).Area = 0;
273
Removed:
web(i).ds = abs(sparCaps(2).posZ - sparCaps(1).posZ);
274
Removed:
web(i).dS_over_t = web(i).ds / web(i).thickness;
275
Removed:
276
Removed:
web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t;
277
Removed:
web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t;
278
Removed:
web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X;
279
Removed:
web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z;
280
Removed:
web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart);
281
Removed:
web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart);
282
Removed:
web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart);
283
Removed:
web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart);
284
Removed:
285
Removed:
webFrontSpar = web;
286
Removed:
web = [];
287
Removed:
288
Removed:
289
Removed:
290
Removed:
291
Removed:
%% web cell 2
292
Removed:
293
Removed:
%lower nose webs
294
Removed:
numStringers = numNoseBottomStringers;
295
Removed:
stringerGap = lowerNoseStringerGap;
296
Removed:
webThickness = t_lower_front;
297
Removed:
tempStringers = noseBottomStringers;
298
Removed:
299
Removed:
for i=1:(numStringers+1)
300
Removed:
web(i).xStart = sparCaps(2).posX - stringerGap*(i-1);
301
Removed:
web(i).xEnd = sparCaps(2).posX - stringerGap*(i);
302
Removed:
web(i).thickness = webThickness;
303
Removed:
web(i).zStart = get_z(web(i).xStart/chord,0)*chord;
304
Removed:
web(i).zEnd = get_z(web(i).xEnd/chord,0)*chord;
305
Removed:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;
306
Removed:
307
Removed:
if i==1
308
Removed:
web(i).dp_area = sparCaps(2).area;
309
Removed:
web(i).dP_X = 0;
310
Removed:
web(i).dP_Z = 0;
311
Removed:
web(i).qPrime_X = 0;
312
Removed:
web(i).qPrime_Z = 0;
313
Removed:
else
314
Removed:
web(i).dp_area = tempStringers(i-1).area;
315
Removed:
web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area);
316
Removed:
web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area);
317
Removed:
web(i).qPrime_X = web(i-1).qPrime_X - web(i).dP_X;
318
Removed:
web(i).qPrime_Z = web(i-1).qPrime_Z - web(i).dP_Z;
319
Removed:
end
320
Removed:
tempInt = get_int(web(i).xEnd/chord,web(i).xStart/chord,0)*chord^2; %integral of airfoil function
321
Removed:
triangle1 = abs((web(i).xStart - sparCaps(2).posX)*web(i).zStart/2);
322
Removed:
triangle2 = abs((web(i).xEnd - sparCaps(2).posX)*web(i).zEnd/2);
323
Removed:
web(i).Area = tempInt + triangle1 - triangle2;
324
Removed:
web(i).ds = get_ds(web(i).xStart/chord,web(i).xEnd/chord,0)*chord;
325
Removed:
web(i).dS_over_t = web(i).ds / web(i).thickness;
326
Removed:
327
Removed:
web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t;
328
Removed:
web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t;
329
Removed:
web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X;
330
Removed:
web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z;
331
Removed:
web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart);
332
Removed:
web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart);
333
Removed:
web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart);
334
Removed:
web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart);
335
Removed:
336
Removed:
%web(i).radCurv = ... Example: get_curve(web(i).xStart,web(i).xEnd,1)
337
Removed:
end
338
Removed:
webLowerNose = web;
339
Removed:
web = [];
340
Removed:
341
Removed:
%upper nose webs
342
Removed:
numStringers = numNoseTopStringers;
343
Removed:
stringerGap = upperNoseStringerGap;
344
Removed:
webThickness = t_upper_front;
345
Removed:
tempStringers = noseTopStringers;
346
Removed:
347
Removed:
for i=1:(numStringers+1)
348
Removed:
web(i).xStart = stringerGap*(i-1);
349
Removed:
web(i).xEnd = stringerGap*(i);
350
Removed:
web(i).thickness = webThickness;
351
Removed:
web(i).zStart = get_z(web(i).xStart/chord,1)*chord;
352
Removed:
web(i).zEnd = get_z(web(i).xEnd/chord,1)*chord;
353
Removed:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;
354
Removed:
if i==1
355
Removed:
web(i).dp_area = 0;
356
Removed:
web(i).dP_X = 0;
357
Removed:
web(i).dP_Z = 0;
358
Removed:
web(i).qPrime_X = webLowerNose(numNoseBottomStringers+1).qPrime_X - web(i).dP_X;
359
Removed:
web(i).qPrime_Z = webLowerNose(numNoseBottomStringers+1).qPrime_Z - web(i).dP_Z;
360
Removed:
else
361
Removed:
web(i).dp_area = tempStringers(i-1).area;
362
Removed:
web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area);
363
Removed:
web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area);
364
Removed:
web(i).qPrime_X = web(i-1).qPrime_X - web(i).dP_X;
365
Removed:
web(i).qPrime_Z = web(i-1).qPrime_Z - web(i).dP_Z;
366
Removed:
end
367
Removed:
tempInt = get_int(web(i).xStart/chord,web(i).xEnd/chord,1)*chord^2; %integral of airfoil function
368
Removed:
triangle2 = abs((web(i).xStart - sparCaps(2).posX)*web(i).zStart/2);
369
Removed:
triangle1 = abs((web(i).xEnd - sparCaps(2).posX)*web(i).zEnd/2);
370
Removed:
web(i).Area = tempInt + triangle1 - triangle2;
371
Removed:
web(i).ds = get_ds(web(i).xStart/chord,web(i).xEnd/chord,1)*chord;
372
Removed:
web(i).dS_over_t = web(i).ds / web(i).thickness;
373
Removed:
374
Removed:
web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t;
375
Removed:
web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t;
376
Removed:
web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X;
377
Removed:
web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z;
378
Removed:
web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart);
379
Removed:
web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart);
380
Removed:
web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart);
381
Removed:
web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart);
382
Removed:
383
Removed:
end
384
Removed:
webUpperNose = web;
385
Removed:
web = [];
386
Removed:
387
Removed:
388
Removed:
%front Spar
389
Removed:
i=1;
390
Removed:
web(i).xStart = sparCaps(1).posX;
391
Removed:
web(i).xEnd = sparCaps(2).posX;
392
Removed:
web(i).thickness = t_frontSpar;
393
Removed:
web(i).zStart = sparCaps(1).posZ;
394
Removed:
web(i).zEnd = sparCaps(2).posZ;
395
Removed:
web(i).dp_area = sparCaps(1).area;
396
Removed:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;
397
Removed:
398
Removed:
web(i).dP_X = get_dp(dx,dz,Vx,0,Ix,Iz,Ixz,web(i).dp_area);
399
Removed:
web(i).dP_Z = get_dp(dx,dz,0,Vz,Ix,Iz,Ixz,web(i).dp_area);
400
Removed:
web(i).qPrime_X = webUpperNose(numNoseTopStringers+1).qPrime_X - web(i).dP_X;
401
Removed:
web(i).qPrime_Z = webUpperNose(numNoseTopStringers+1).qPrime_Z - web(i).dP_Z;
402
Removed:
web(i).Area = 0;
403
Removed:
web(i).ds = abs(sparCaps(1).posZ - sparCaps(2).posZ);
404
Removed:
web(i).dS_over_t = web(i).ds / web(i).thickness;
405
Removed:
web(i).q_dS_over_t_X = web(i).qPrime_X * web(i).dS_over_t;
406
Removed:
web(i).q_dS_over_t_Z = web(i).qPrime_Z * web(i).dS_over_t;
407
Removed:
web(i).two_A_qprime_X = 2*web(i).Area*web(i).qPrime_X;
408
Removed:
web(i).two_A_qprime_Z = 2*web(i).Area*web(i).qPrime_Z;
409
Removed:
web(i).qp_dx_X = web(i).qPrime_X *(web(i).xEnd-web(i).xStart);
410
Removed:
web(i).qp_dx_Z = web(i).qPrime_Z *(web(i).xEnd-web(i).xStart);
411
Removed:
web(i).qp_dz_X = web(i).qPrime_X *(web(i).zEnd-web(i).zStart);
412
Removed:
web(i).qp_dz_Z = web(i).qPrime_Z *(web(i).zEnd-web(i).zStart);
413
Removed:
414
Removed:
webFrontSparCell2 = web;
415
Removed:
web = [];
416
Removed:
417
Removed:
418
Removed:
%check that q'*dx sums up to Vx
419
Removed:
420
Removed:
Fx = sum([webTop.qp_dx_X])+webRearSpar.qp_dx_X+ sum([webBottom.qp_dx_X])+webFrontSpar.qp_dx_X; %cell 1
421
Removed:
Fx = Fx + sum([webLowerNose.qp_dx_X])+ sum([webUpperNose.qp_dx_X]); %cell 2
422
Removed:
Fx
423
Removed:
Fz = sum([webTop.qp_dz_X])+webRearSpar.qp_dz_X+ sum([webBottom.qp_dz_X])+webFrontSpar.qp_dz_X; %cell 1
424
Removed:
Fz = Fz + sum([webLowerNose.qp_dz_X])+ sum([webUpperNose.qp_dz_X]); %cell 2
425
Removed:
Fz
426
Removed:
427
Removed:
%check that q'*dz sums up to Vz
428
Removed:
429
Removed:
430
Removed:
Fx = sum([webTop.qp_dx_Z])+webRearSpar.qp_dx_Z+ sum([webBottom.qp_dx_Z])+webFrontSpar.qp_dx_Z; %cell 1
431
Removed:
Fx = Fx + sum([webLowerNose.qp_dx_Z])+ sum([webUpperNose.qp_dx_Z]); %cell 2
432
Removed:
Fx
433
Removed:
Fz = sum([webTop.qp_dz_Z])+webRearSpar.qp_dz_Z+ sum([webBottom.qp_dz_Z])+webFrontSpar.qp_dz_Z; %cell 1
434
Removed:
Fz = Fz + sum([webLowerNose.qp_dz_Z])+ sum([webUpperNose.qp_dz_Z]); %cell 2
435
Removed:
Fz
436
Removed:
437
Removed:
%%
438
Removed:
439
Removed:
% sum up the ds/t and q*ds/t to solve 2 equations, 2 unknowns
440
Removed:
441
Removed:
% [A]*[q1s q2s] = B
442
Removed:
443
Removed:
A11 = sum([webTop.dS_over_t])+webRearSpar.dS_over_t+ sum([webBottom.dS_over_t])+webFrontSpar.dS_over_t;
444
Removed:
A22 = sum([webLowerNose.dS_over_t])+ sum([webUpperNose.dS_over_t])+webFrontSparCell2.dS_over_t;
445
Removed:
A12 = -webFrontSpar.dS_over_t;
446
Removed:
A21 = -webFrontSparCell2.dS_over_t;
447
Removed:
448
Removed:
B1_X = sum([webTop.q_dS_over_t_X])+webRearSpar.q_dS_over_t_X+ sum([webBottom.q_dS_over_t_X])+webFrontSpar.q_dS_over_t_X;
449
Removed:
B2_X = sum([webLowerNose.q_dS_over_t_X])+ sum([webUpperNose.q_dS_over_t_X])+webFrontSparCell2.q_dS_over_t_X;
450
Removed:
B1_Z = sum([webTop.q_dS_over_t_Z])+webRearSpar.q_dS_over_t_Z+ sum([webBottom.q_dS_over_t_Z])+webFrontSpar.q_dS_over_t_Z;
451
Removed:
B2_Z = sum([webLowerNose.q_dS_over_t_Z])+ sum([webUpperNose.q_dS_over_t_Z])+webFrontSparCell2.q_dS_over_t_Z;
452
Removed:
453
Removed:
Amat = [A11 A12; A21 A22];
454
Removed:
Bmat_X = -[B1_X;B2_X];
455
Removed:
Bmat_Z = -[B1_Z;B2_Z];
456
Removed:
457
Removed:
qs_X = inv(Amat)*Bmat_X;
458
Removed:
qs_Z = inv(Amat)*Bmat_Z;
459
Removed:
460
Removed:
461
Removed:
462
Removed:
sum_2_a_q_X = sum([webTop.two_A_qprime_X])+webRearSpar.two_A_qprime_X+ sum([webBottom.two_A_qprime_X]); %cell 1 qprimes
463
Removed:
sum_2_a_q_X = sum_2_a_q_X + sum([webLowerNose.two_A_qprime_X])+ sum([webUpperNose.two_A_qprime_X]); %cell 2 qprimes
464
Removed:
sum_2_a_q_X = sum_2_a_q_X + 2*qs_X(1)*(sum([webTop.Area])+webRearSpar.Area+ sum([webBottom.Area]));
465
Removed:
sum_2_a_q_X = sum_2_a_q_X + 2*qs_X(2)*(sum([webLowerNose.Area])+ sum([webUpperNose.Area]));
466
Removed:
467
Removed:
sum_2_a_q_Z = sum([webTop.two_A_qprime_Z])+webRearSpar.two_A_qprime_Z+ sum([webBottom.two_A_qprime_Z]); %cell 1 qprimes
468
Removed:
sum_2_a_q_Z = sum_2_a_q_Z + sum([webLowerNose.two_A_qprime_Z])+ sum([webUpperNose.two_A_qprime_Z]); %cell 2 qprimes
469
Removed:
sum_2_a_q_Z = sum_2_a_q_Z + 2*qs_Z(1)*(sum([webTop.Area])+webRearSpar.Area+ sum([webBottom.Area]));
470
Removed:
sum_2_a_q_Z = sum_2_a_q_Z + 2*qs_Z(2)*(sum([webLowerNose.Area])+ sum([webUpperNose.Area]));
471
Removed:
472
Removed:
%shear center
473
Removed:
sc.posX = sum_2_a_q_Z / Vz + frontSpar*chord;
474
Removed:
sc.posZ = - sum_2_a_q_X / Vx;
475
Removed:
476
Removed:
477
Removed:
% now consider the torque representing shifting the load from the quarter
478
Removed:
% chord to the SC (need to check signs on these moments)
479
Removed:
480
Removed:
torque_Z = Vz*(sc.posX - 0.25*chord);
481
Removed:
torque_X = -Vx*sc.posZ;
482
Removed:
483
Removed:
484
Removed:
Area1 = sum([webTop.Area]) + webRearSpar.Area + sum([webBottom.Area]);
485
Removed:
%check area
486
Removed:
Area1_check = get_int(frontSpar,backSpar,1)*chord^2 + get_int(frontSpar,backSpar,0)*chord^2;
487
Removed:
488
Removed:
Area2 = sum([webLowerNose.Area]) + sum([webUpperNose.Area]);
489
Removed:
Area2_check = get_int(0,frontSpar,1)*chord^2 + get_int(0,frontSpar,0)*chord^2;
490
Removed:
491
Removed:
492
Removed:
%for twist equation (see excel spreadsheet example)
493
Removed:
494
Removed:
q1t_over_q2t = (A22/Area2 + webFrontSpar.dS_over_t/Area1)/(A11/Area1 + webFrontSpar.dS_over_t/Area2);
495
Removed:
496
Removed:
q2t = torque_X/(2*Area1*q1t_over_q2t + 2*Area2);
497
Removed:
q1t = q2t*q1t_over_q2t;
498
Removed:
qt_X = [q1t;q2t];
499
Removed:
500
Removed:
q2t = torque_Z/(2*Area1*q1t_over_q2t + 2*Area2);
501
Removed:
q1t = q2t*q1t_over_q2t;
502
Removed:
qt_Z = [q1t;q2t];
503
Removed:
504
Removed:
505
Removed:
506
Removed:
% --- - add up all shear flows: qtot = (qPrime + qs) + qt
507
Removed:
508
Removed:
509
Removed:
510
Removed:
511
Removed:
%--- insert force balance to check total shear flows ---
512
Removed:
513
Removed:
% --- --
514
Removed:
515
Removed:
516
Removed:
%end
517
Removed:
518
Removed:
sc
519
Removed:
520
Removed:
521
Removed:
%plotting airfoil cross-section
522
Removed:
523
Removed:
xChord = 0:.01:1;
524
Removed:
xChord = xChord*chord;
525
Removed:
upperSurface = zeros(1,length(xChord));
526
Removed:
lowerSurface = zeros(1,length(xChord));
527
Removed:
528
Removed:
for i=1:length(xChord)
529
Removed:
upperSurface(i) = get_z(xChord(i)/chord,1)*chord;
530
Removed:
lowerSurface(i) = get_z(xChord(i)/chord,0)*chord;
531
Removed:
end
532
Removed:
533
Removed:
figure; hold on; axis equal; grid on;
534
Removed:
%plot(xChord,z_camber,'-')
535
Removed:
plot(xChord,upperSurface,'-k','linewidth',2)
536
Removed:
plot(xChord,lowerSurface,'-k','linewidth',2)
537
Removed:
plot([0 1],[0 0],'--k','linewidth',1)
538
Removed:
539
Removed:
540
Removed:
for i = 1:length(webTop)
541
Removed:
vecX = [frontSpar*chord webTop(i).xStart webTop(i).xEnd];
542
Removed:
vecZ = [0 webTop(i).zStart webTop(i).zEnd];
543
Removed:
fill(vecX,vecZ,[0.9 0.9 0.9])
544
Removed:
end
545
Removed:
546
Removed:
for i = 1:length(webBottom)
547
Removed:
vecX = [frontSpar*chord webBottom(i).xStart webBottom(i).xEnd];
548
Removed:
vecZ = [0 webBottom(i).zStart webBottom(i).zEnd];
549
Removed:
fill(vecX,vecZ,[0.9 0.9 0.9])
550
Removed:
end
551
Removed:
552
Removed:
for i = 1:length(webUpperNose)
553
Removed:
vecX = [frontSpar*chord webUpperNose(i).xStart webUpperNose(i).xEnd];
554
Removed:
vecZ = [0 webUpperNose(i).zStart webUpperNose(i).zEnd];
555
Removed:
fill(vecX,vecZ,[0.7 0.9 1.0])
556
Removed:
end
557
Removed:
558
Removed:
for i = 1:length(webLowerNose)
559
Removed:
vecX = [frontSpar*chord webLowerNose(i).xStart webLowerNose(i).xEnd];
560
Removed:
vecZ = [0 webLowerNose(i).zStart webLowerNose(i).zEnd];
561
Removed:
fill(vecX,vecZ,[0.7 0.9 1.0])
562
Removed:
end
563
Removed:
564
Removed:
vecX = [frontSpar*chord sparCaps(3).posX sparCaps(4).posX];
565
Removed:
vecZ = [0 sparCaps(3).posZ sparCaps(4).posZ];
566
Removed:
fill(vecX,vecZ,[0.9 0.9 0.9])
567
Removed:
568
Removed:
569
Removed:
sparCapSize = 18;
570
Removed:
stringerSize = 18;
571
Removed:
plot([sparCaps(1).posX sparCaps(2).posX],[sparCaps(1).posZ sparCaps(2).posZ],'-k','linewidth',2)
572
Removed:
plot([sparCaps(3).posX sparCaps(4).posX],[sparCaps(3).posZ sparCaps(4).posZ],'-k','linewidth',2)
573
Removed:
plot([sparCaps.posX],[sparCaps.posZ],'.b','markersize',sparCapSize)
574
Removed:
plot([topStringers.posX],[topStringers.posZ],'.r','markersize',stringerSize)
575
Removed:
plot([bottomStringers.posX],[bottomStringers.posZ],'.r','markersize',stringerSize)
576
Removed:
plot([noseTopStringers.posX],[noseTopStringers.posZ],'.r','markersize',stringerSize)
577
Removed:
plot([noseBottomStringers.posX],[noseBottomStringers.posZ],'.r','markersize',stringerSize)
578
Removed:
plot(centroid.posX,centroid.posZ,'.k','markerSize',18)
579
Removed:
plot(sc.posX,sc.posZ,'.g','markersize',18)