*ARCHIVED* development moved to aircraft-studio.
Change README.md to org
Better README capacity in org-mode
Changed files
README.md
@@ -1,8 +0,0 @@
1
Removed:
# UCLA MAE 154B
2
Removed:
3
Removed:
## Spring 2019 Final Project
4
Removed:
5
Removed:
This program enables the creation of NACA airfoils;\
6
Removed:
the analysis of the airfoil's structural properties;\
7
Removed:
the optimization via genetic algorithm of a population of airfoils;\
8
Removed:
With the final objective of designing a lightweight FAR 23 compliant airfoil.
README.org
@@ -0,0 +1,7 @@
1
Added:
#+TITLE: UCLA MAE 154B
2
Added:
#+SUBTITLE: Spring 2019 Final Project
3
Added:
4
Added:
This program enables the creation of NACA airfoils;
5
Added:
the analysis of the airfoil's structural properties;
6
Added:
the optimization via genetic algorithm of a population of airfoils;
7
Added:
With the final objective of designing a lightweight FAR 23 compliant airfoil.
TAGS
@@ -0,0 +1,445 @@
1
Added:
2
Added:
/home/blendux/github/UCLA_MAE_154B/example_airfoil.py,842
3
Added:
start_time = time.time()start_time15,374
4
Added:
NACA_NUM = 2412NACA_NUM18,426
5
Added:
CHORD_LENGTH = 68CHORD_LENGTH19,442
6
Added:
SEMI_SPAN = 150SEMI_SPAN20,460
7
Added:
SPAR_THICKNESS = 0.4SPAR_THICKNESS23,491
8
Added:
SKIN_THICKNESS = 0.1SKIN_THICKNESS24,512
9
Added:
AIRFOIL_MASS = 10AIRFOIL_MASS27,559
10
Added:
SPAR_MASS = 10SPAR_MASS28,577
11
Added:
STRINGER_MASS = 5STRINGER_MASS29,592
12
Added:
SPAR_CAP_AREA = 0.3SPAR_CAP_AREA32,625
13
Added:
STRINGER_AREA = 0.1STRINGER_AREA33,645
14
Added:
TOP_STRINGERS = 6TOP_STRINGERS36,688
15
Added:
BOTTOM_STRINGERS = 4BOTTOM_STRINGERS37,706
16
Added:
NOSE_TOP_STRINGERS = 3NOSE_TOP_STRINGERS38,727
17
Added:
NOSE_BOTTOM_STRINGERS = 5NOSE_BOTTOM_STRINGERS39,750
18
Added:
SAVE_PATH = '/home/blendux/github/UCLA_MAE_154B/save/'SAVE_PATH41,777
19
Added:
af = creator.Airfoil.from_dimensions(CHORD_LENGTH, SEMI_SPAN)af45,860
20
Added:
eval = evaluator.Evaluator(af)eval81,2026
21
Added:
pop = generator.Population(10)pop89,2245
22
Added:
23
Added:
/home/blendux/github/UCLA_MAE_154B/wing_scripts/my_progress.m,7747
24
Added:
Vx = 1; Vz = 1; My = 1; %test loads will be applied individuallyVx5,40
25
Added:
numStringers = numTopStringers;numStringers15,163
26
Added:
stringerGap = upperStringerGap;stringerGap16,195
27
Added:
webThickness = t_upper;webThickness17,227
28
Added:
tempStringers = topStringers;tempStringers18,251
29
Added:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;dx34,786
30
Added:
tempInt = get_int(web(i).xStart/chord,web(i).xEnd/chord,1)*chord^2; %integral of airfoil futempInt40,1142
31
Added:
triangle1 = abs( (web(i).xStart - sparCaps(1).posX)*web(i).zStart/2);triangle141,1245
32
Added:
triangle2 = abs((web(i).xEnd - sparCaps(1).posX)*web(i).zEnd/2);triangle242,1319
33
Added:
webTop = web;webTop56,2080
34
Added:
web = [];web57,2094
35
Added:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;dx67,2319
36
Added:
webRearSpar = web;webRearSpar87,3367
37
Added:
web = [];web88,3386
38
Added:
numStringers = numBottomStringers;numStringers92,3410
39
Added:
stringerGap = lowerStringerGap;stringerGap93,3445
40
Added:
webThickness = t_lower;webThickness94,3477
41
Added:
tempStringers = bottomStringers;tempStringers95,3501
42
Added:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;dx103,3817
43
Added:
tempInt = get_int(web(i).xEnd/chord,web(i).xStart/chord,0)*chord^2; %integral of airfoil futempInt118,4524
44
Added:
triangle2 = abs((web(i).xStart - sparCaps(1).posX)*web(i).zStart/2);triangle2119,4627
45
Added:
triangle1 = abs((web(i).xEnd - sparCaps(1).posX)*web(i).zEnd/2);triangle1120,4700
46
Added:
webBottom = web;webBottom136,5535
47
Added:
web = [];web137,5552
48
Added:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;dx147,5779
49
Added:
webFrontSpar = web;webFrontSpar165,6715
50
Added:
web = [];web166,6735
51
Added:
numStringers = numNoseBottomStringers;numStringers174,6781
52
Added:
stringerGap = lowerNoseStringerGap;stringerGap175,6820
53
Added:
webThickness = t_lower_front;webThickness176,6856
54
Added:
tempStringers = noseBottomStringers;tempStringers177,6886
55
Added:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;dx185,7206
56
Added:
tempInt = get_int(web(i).xEnd/chord,web(i).xStart/chord,0)*chord^2; %integral of airfoil futempInt200,7761
57
Added:
triangle1 = abs((web(i).xStart - sparCaps(2).posX)*web(i).zStart/2);triangle1201,7864
58
Added:
triangle2 = abs((web(i).xEnd - sparCaps(2).posX)*web(i).zEnd/2);triangle2202,7937
59
Added:
webLowerNose = web;webLowerNose218,8776
60
Added:
web = [];web219,8796
61
Added:
numStringers = numNoseTopStringers;numStringers222,8824
62
Added:
stringerGap = upperNoseStringerGap;stringerGap223,8860
63
Added:
webThickness = t_upper_front;webThickness224,8896
64
Added:
tempStringers = noseTopStringers;tempStringers225,8926
65
Added:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;dx233,9205
66
Added:
tempInt = get_int(web(i).xStart/chord,web(i).xEnd/chord,1)*chord^2; %integral of airfoil futempInt247,9864
67
Added:
triangle2 = abs((web(i).xStart - sparCaps(2).posX)*web(i).zStart/2);triangle2248,9967
68
Added:
triangle1 = abs((web(i).xEnd - sparCaps(2).posX)*web(i).zEnd/2);triangle1249,10040
69
Added:
webUpperNose = web;webUpperNose264,10802
70
Added:
web = [];web265,10822
71
Added:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;dx276,11050
72
Added:
webFrontSparCell2 = web;webFrontSparCell2294,11994
73
Added:
web = [];web295,12019
74
Added:
Fx = sum([webTop.qp_dx_X])+webRearSpar.qp_dx_X+ sum([webBottom.qp_dx_X])+webFrontSpar.qp_dx_X; Fx300,12064
75
Added:
Fx = Fx + sum([webLowerNose.qp_dx_X])+ sum([webUpperNose.qp_dx_X]); %cell 2Fx301,12168
76
Added:
Fz = sum([webTop.qp_dz_X])+webRearSpar.qp_dz_X+ sum([webBottom.qp_dz_X])+webFrontSpar.qp_dz_X; Fz303,12248
77
Added:
Fz = Fz + sum([webLowerNose.qp_dz_X])+ sum([webUpperNose.qp_dz_X]); %cell 2Fz304,12352
78
Added:
Fx = sum([webTop.qp_dx_Z])+webRearSpar.qp_dx_Z+ sum([webBottom.qp_dx_Z])+webFrontSpar.qp_dx_Z; Fx310,12467
79
Added:
Fx = Fx + sum([webLowerNose.qp_dx_Z])+ sum([webUpperNose.qp_dx_Z]); %cell 2Fx311,12571
80
Added:
Fz = sum([webTop.qp_dz_Z])+webRearSpar.qp_dz_Z+ sum([webBottom.qp_dz_Z])+webFrontSpar.qp_dz_Z; Fz313,12651
81
Added:
Fz = Fz + sum([webLowerNose.qp_dz_Z])+ sum([webUpperNose.qp_dz_Z]); %cell 2Fz314,12755
82
Added:
A11 = sum([webTop.dS_over_t])+webRearSpar.dS_over_t+ sum([webBottom.dS_over_t])+webFrontSpar.dS_A11323,12925
83
Added:
A22 = sum([webLowerNose.dS_over_t])+ sum([webUpperNose.dS_over_t])+webFrontSparCell2.dS_over_t;A22324,13029
84
Added:
A12 = -webFrontSpar.dS_over_t;A12325,13125
85
Added:
A21 = -webFrontSparCell2.dS_over_t;A21326,13156
86
Added:
B1_X = sum([webTop.q_dS_over_t_X])+webRearSpar.q_dS_over_t_X+ sum([webBottom.q_dS_over_t_X])+webB1_X328,13193
87
Added:
B2_X = sum([webLowerNose.q_dS_over_t_X])+ sum([webUpperNose.q_dS_over_t_X])+webFrontSparCell2.q_B2_X329,13314
88
Added:
B1_Z = sum([webTop.q_dS_over_t_Z])+webRearSpar.q_dS_over_t_Z+ sum([webBottom.q_dS_over_t_Z])+webB1_Z330,13423
89
Added:
B2_Z = sum([webLowerNose.q_dS_over_t_Z])+ sum([webUpperNose.q_dS_over_t_Z])+webFrontSparCell2.q_B2_Z331,13544
90
Added:
Amat = [A11 A12; A21 A22];Amat333,13654
91
Added:
Bmat_X = -[B1_X;B2_X];Bmat_X334,13681
92
Added:
Bmat_Z = -[B1_Z;B2_Z];Bmat_Z335,13704
93
Added:
qs_X = inv(Amat)*Bmat_X;qs_X337,13728
94
Added:
qs_Z = inv(Amat)*Bmat_Z;qs_Z338,13753
95
Added:
sum_2_a_q_X = sum([webTop.two_A_qprime_X])+webRearSpar.two_A_qprime_X+ sum([webBottom.two_A_qprisum_2_a_q_X342,13781
96
Added:
sum_2_a_q_X = sum_2_a_q_X + sum([webLowerNose.two_A_qprime_X])+ sum([webUpperNose.two_A_qprime_Xsum_2_a_q_X343,13902
97
Added:
sum_2_a_q_X = sum_2_a_q_X + 2*qs_X(1)*(sum([webTop.Area])+webRearSpar.Area+ sum([webBottom.Areasum_2_a_q_X344,14020
98
Added:
sum_2_a_q_X = sum_2_a_q_X + 2*qs_X(2)*(sum([webLowerNose.Area])+ sum([webUpperNose.Area]));sum_2_a_q_X345,14121
99
Added:
sum_2_a_q_Z = sum([webTop.two_A_qprime_Z])+webRearSpar.two_A_qprime_Z+ sum([webBottom.two_A_qprisum_2_a_q_Z347,14215
100
Added:
sum_2_a_q_Z = sum_2_a_q_Z + sum([webLowerNose.two_A_qprime_Z])+ sum([webUpperNose.two_A_qprime_Zsum_2_a_q_Z348,14336
101
Added:
sum_2_a_q_Z = sum_2_a_q_Z + 2*qs_Z(1)*(sum([webTop.Area])+webRearSpar.Area+ sum([webBottom.Areasum_2_a_q_Z349,14454
102
Added:
sum_2_a_q_Z = sum_2_a_q_Z + 2*qs_Z(2)*(sum([webLowerNose.Area])+ sum([webUpperNose.Area]));sum_2_a_q_Z350,14555
103
Added:
torque_Z = Vz*(sc.posX - 0.25*chord);torque_Z360,14875
104
Added:
torque_X = -Vx*sc.posZ;torque_X361,14913
105
Added:
Area1 = sum([webTop.Area]) + webRearSpar.Area + sum([webBottom.Area]);Area1364,14939
106
Added:
Area1_check = get_int(frontSpar,backSpar,1)*chord^2 + get_int(frontSpar,backSpar,0)*chord^2;Area1_check366,15022
107
Added:
Area2 = sum([webLowerNose.Area]) + sum([webUpperNose.Area]);Area2368,15116
108
Added:
Area2_check = get_int(0,frontSpar,1)*chord^2 + get_int(0,frontSpar,0)*chord^2;Area2_check369,15177
109
Added:
q1t_over_q2t = (A22/Area2 + webFrontSpar.dS_over_t/Area1)/(A11/Area1 + webFrontSpar.dS_over_t/Arq1t_over_q2t374,15312
110
Added:
q2t = torque_X/(2*Area1*q1t_over_q2t + 2*Area2);q2t376,15415
111
Added:
q1t = q2t*q1t_over_q2t;q1t377,15464
112
Added:
qt_X = [q1t;q2t];qt_X378,15488
113
Added:
q2t = torque_Z/(2*Area1*q1t_over_q2t + 2*Area2);q2t380,15507
114
Added:
q1t = q2t*q1t_over_q2t;q1t381,15556
115
Added:
qt_Z = [q1t;q2t];qt_Z382,15580
116
Added:
xChord = 0:.01:1;xChord403,15777
117
Added:
xChord = xChord*chord;xChord404,15795
118
Added:
upperSurface = zeros(1,length(xChord));upperSurface405,15818
119
Added:
lowerSurface = zeros(1,length(xChord));lowerSurface406,15858
120
Added:
vecX = [frontSpar*chord webTop(i).xStart webTop(i).xEnd];vecX421,16255
121
Added:
vecZ = [0 webTop(i).zStart webTop(i).zEnd];vecZ422,16316
122
Added:
vecX = [frontSpar*chord webBottom(i).xStart webBottom(i).xEnd];vecX427,16429
123
Added:
vecZ = [0 webBottom(i).zStart webBottom(i).zEnd];vecZ428,16496
124
Added:
vecX = [frontSpar*chord webUpperNose(i).xStart webUpperNose(i).xEnd];vecX433,16618
125
Added:
vecZ = [0 webUpperNose(i).zStart webUpperNose(i).zEnd];vecZ434,16691
126
Added:
vecX = [frontSpar*chord webLowerNose(i).xStart webLowerNose(i).xEnd];vecX439,16819
127
Added:
vecZ = [0 webLowerNose(i).zStart webLowerNose(i).zEnd];vecZ440,16892
128
Added:
vecX = [frontSpar*chord sparCaps(3).posX sparCaps(4).posX];vecX444,16989
129
Added:
vecZ = [0 sparCaps(3).posZ sparCaps(4).posZ];vecZ445,17052
130
Added:
sparCapSize = 18;sparCapSize449,17136
131
Added:
stringerSize = 18;stringerSize450,17154
132
Added:
133
Added:
/home/blendux/github/UCLA_MAE_154B/wing_scripts/get_z.m,481
134
Added:
function z = get_z(x,u)get_z1,0
135
Added:
M = 0.02;M9,66
136
Added:
P = 0.4;P10,76
137
Added:
T = 0.12;T11,85
138
Added:
a0 = 0.2969;a012,95
139
Added:
a1 = -0.126;a113,108
140
Added:
a2 = -0.3516;a214,121
141
Added:
a3 = 0.2843;a315,135
142
Added:
a4 = -0.1015;a416,148
143
Added:
z_camber = M/P^2*(2*P*x - x^2);z_camber19,171
144
Added:
z_camber = (M/(1-P)^2)*(1 - 2*P +2*P*x - x^2);z_camber21,212
145
Added:
z_thickness = (T/0.2)*(a0*x^.5+a1*x+a2*x^2+a3*x^3+a4*x^4);z_thickness25,301
146
Added:
z = z_camber + z_thickness;z28,369
147
Added:
z = z_camber - z_thickness;z30,406
148
Added:
149
Added:
/home/blendux/github/UCLA_MAE_154B/wing_scripts/get_dp.m,169
150
Added:
function z = get_dp(xDist,zDist,Vx,Vz,Ix,Iz,Ixz,A)get_dp1,0
151
Added:
denom = (Ix*Iz-Ixz^2);denom3,52
152
Added:
z = -A*xDist*(Ix*Vx-Ixz*Vz)/denom - A*zDist*(Iz*Vz-Ixz*Vx)/denom;z4,75
153
Added:
154
Added:
/home/blendux/github/UCLA_MAE_154B/wing_scripts/get_int.m,925
155
Added:
function z = get_int(xi,xf,u)get_int1,0
156
Added:
M = 0.02;M3,31
157
Added:
P = 0.4;P4,41
158
Added:
T = 0.12;T5,50
159
Added:
a0 = 0.2969;a06,60
160
Added:
a1 = -0.126;a17,73
161
Added:
a2 = -0.3516;a28,86
162
Added:
a3 = 0.2843;a39,100
163
Added:
a4 = -0.1015;a410,113
164
Added:
intCamb = M/P^2*(2*P*xf^2/2 - xf^3/3) - M/P^2*(2*P*xi^2/2 - xi^3/3); intCamb16,214
165
Added:
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^intCamb18,303
166
Added:
intCamb = intCamb + M/P^2*(2*P*P^2/2 - P^3/3) - M/P^2*(2*P*xi^2/2 - xi^3/3);intCamb19,413
167
Added:
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*xintCamb21,499
168
Added:
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);intThickness27,710
169
Added:
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^intThickness28,797
170
Added:
z = intCamb + intThickness; z32,964
171
Added:
z = abs(intCamb - intThickness);z34,1001
172
Added:
173
Added:
/home/blendux/github/UCLA_MAE_154B/wing_scripts/eye_beam_example.m,1004
174
Added:
length = 20; % inlength4,44
175
Added:
force = 10000; %lbsforce5,62
176
Added:
max_width = 4; % inmax_width9,105
177
Added:
min_width = 1; % inmin_width10,125
178
Added:
y_max = 4; % iny_max11,145
179
Added:
center_y = 2; % incenter_y12,161
180
Added:
M = force*length;M17,218
181
Added:
I = min_width*(2*center_y)^3/12 + 2*( max_width*(y_max-center_y)^3/12 + ...I19,237
182
Added:
sigma_max = M * y_max / I;sigma_max22,370
183
Added:
tempCoeff = force / (I * max_width);tempCoeff29,542
184
Added:
int_y_da = ((y_max+center_y)/2) * max_width*(y_max-center_y);int_y_da30,579
185
Added:
shear_1 = tempCoeff*int_y_da;shear_131,641
186
Added:
tempCoeff = force / (I * min_width);tempCoeff34,749
187
Added:
shear_2 = tempCoeff*int_y_da;shear_235,786
188
Added:
tempCoeff = force / (I * min_width);tempCoeff39,857
189
Added:
int_y_da = (center_y/2) * min_width*center_y;int_y_da40,894
190
Added:
shear_3 = shear_2+tempCoeff*int_y_da;shear_341,940
191
Added:
int_y_da_4 = force / (I * max_width)*4*(y_max^2/2 - (center_y:.1:y_max).^2/2);int_y_da_444,1027
192
Added:
int_y_da_1 = shear_2 + force / (I * min_width)*1*(center_y^2/2 - (0:.1:center_y).^2/2);int_y_da_147,1155
193
Added:
194
Added:
/home/blendux/github/UCLA_MAE_154B/wing_scripts/get_ds.m,378
195
Added:
function ds = get_ds(xi,xf,u)get_ds1,0
196
Added:
dist = 0;dist3,31
197
Added:
numSteps = 10;numSteps4,41
198
Added:
dx = (xf-xi)/numSteps;dx5,56
199
Added:
z0 = get_z(xi,u);z06,79
200
Added:
x0 = xi;x07,97
201
Added:
tempX = x0+dx;tempX9,117
202
Added:
tempZ = get_z(tempX,u);tempZ11,153
203
Added:
tempZ = 0;tempZ13,195
204
Added:
dist = dist + (dx^2+(tempZ-z0)^2)^.5;dist15,222
205
Added:
z0 = tempZ;z016,264
206
Added:
x0 = tempX;x017,280
207
Added:
208
Added:
/home/blendux/github/UCLA_MAE_154B/wing_scripts/stringersBeamExample.m,837
209
Added:
force = 8000; % lbsforce2,12
210
Added:
stringer_A = 0.5; % in^2stringer_A3,32
211
Added:
thickness = 0.04; % inthickness4,57
212
Added:
top_stringers_y = 6; % intop_stringers_y6,81
213
Added:
middle_stringers_y = 2; % inmiddle_stringers_y7,107
214
Added:
I = 2*stringer_A*top_stringers_y^2 + 2*stringer_A*middle_stringers_y^2;I9,137
215
Added:
shear_top_web = force / (I*thickness) * top_stringers_y * stringer_A;shear_top_web15,381
216
Added:
shear_middle_web = shear_top_web + (force / (I*thickness) * middle_stringers_y * stringer_A);shear_middle_web16,451
217
Added:
d_sigma = force * top_stringers_y / I; %(lbs/in^2)d_sigma36,1520
218
Added:
d_force_top = d_sigma * stringer_A;d_force_top37,1572
219
Added:
d_sigma = force * middle_stringers_y / I; %(lbs/in^2)d_sigma40,1631
220
Added:
d_force_middle = d_force_top + d_sigma*stringer_A;d_force_middle41,1686
221
Added:
check_load = 2*d_force_top*4 + d_force_middle*4;check_load44,1762
222
Added:
223
Added:
/home/blendux/github/UCLA_MAE_154B/wing_scripts/wingAnalysis_190422.m,10240
224
Added:
Vx = 1; Vz = 1; My = 1; %test loads will be applied individuallyVx8,43
225
Added:
numTopStringers = 6;numTopStringers11,124
226
Added:
numBottomStringers = 8;numBottomStringers12,145
227
Added:
numNoseTopStringers = 4;numNoseTopStringers13,169
228
Added:
numNoseBottomStringers = 4;numNoseBottomStringers14,194
229
Added:
t_upper = 0.02/12;t_upper16,223
230
Added:
t_lower = 0.02/12;t_lower17,242
231
Added:
t_upper_front = 0.02/12;t_upper_front18,261
232
Added:
t_lower_front = 0.02/12;t_lower_front19,286
233
Added:
t_frontSpar = 0.04/12;t_frontSpar20,311
234
Added:
t_rearSpar = 0.04/12;t_rearSpar21,334
235
Added:
frontSpar = 0.2;frontSpar23,357
236
Added:
backSpar = 0.7;backSpar24,374
237
Added:
chord = 5;chord25,390
238
Added:
upperStringerGap = (sparCaps(3).posX - sparCaps(1).posX)/(numTopStringers + 1);upperStringerGap42,817
239
Added:
lowerStringerGap = (sparCaps(3).posX - sparCaps(1).posX)/(numBottomStringers + 1);lowerStringerGap43,897
240
Added:
upperNoseStringerGap = (sparCaps(1).posX - 0)/(numNoseTopStringers + 1);upperNoseStringerGap44,980
241
Added:
lowerNoseStringerGap = (sparCaps(1).posX - 0)/(numNoseBottomStringers + 1);lowerNoseStringerGap45,1053
242
Added:
Ix = 0; Iz = 0; Ixz = 0;Ix98,3144
243
Added:
Ix = Ix + sparCaps(i).area*(sparCaps(i).posZ-centroid.posZ)^2;Ix101,3191
244
Added:
Iz = Iz + sparCaps(i).area*(sparCaps(i).posX-centroid.posX)^2;Iz102,3258
245
Added:
Ixz = Ixz + sparCaps(i).area*(sparCaps(i).posX-centroid.posX)*(sparCaps(i).posZ-centroid.posIxz103,3325
246
Added:
Ix = Ix + topStringers(i).area*(topStringers(i).posZ-centroid.posZ)^2;Ix108,3470
247
Added:
Iz = Iz + topStringers(i).area*(topStringers(i).posX-centroid.posX)^2;Iz109,3545
248
Added:
Ixz = Ixz + topStringers(i).area*(topStringers(i).posX-centroid.posX)*(topStringers(i).posZ-Ixz110,3620
249
Added:
Ix = Ix + bottomStringers(i).area*(bottomStringers(i).posZ-centroid.posZ)^2;Ix113,3781
250
Added:
Iz = Iz + bottomStringers(i).area*(bottomStringers(i).posX-centroid.posX)^2;Iz114,3862
251
Added:
Ixz = Ixz + bottomStringers(i).area*(bottomStringers(i).posX-centroid.posX)*(bottomStringersIxz115,3943
252
Added:
Ix = Ix + noseTopStringers(i).area*(noseTopStringers(i).posZ-centroid.posZ)^2;Ix118,4116
253
Added:
Iz = Iz + noseTopStringers(i).area*(noseTopStringers(i).posX-centroid.posX)^2;Iz119,4199
254
Added:
Ixz = Ixz + noseTopStringers(i).area*(noseTopStringers(i).posX-centroid.posX)*(noseTopStringIxz120,4282
255
Added:
Ix = Ix + noseBottomStringers(i).area*(noseBottomStringers(i).posZ-centroid.posZ)^2;Ix123,4464
256
Added:
Iz = Iz + noseBottomStringers(i).area*(noseBottomStringers(i).posX-centroid.posX)^2;Iz124,4553
257
Added:
Ixz = Ixz + noseBottomStringers(i).area*(noseBottomStringers(i).posX-centroid.posX)*(noseBotIxz125,4642
258
Added:
numStringers = numTopStringers;numStringers135,4835
259
Added:
stringerGap = upperStringerGap;stringerGap136,4867
260
Added:
webThickness = t_upper;webThickness137,4899
261
Added:
tempStringers = topStringers;tempStringers138,4923
262
Added:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;dx154,5458
263
Added:
tempInt = get_int(web(i).xStart/chord,web(i).xEnd/chord,1)*chord^2; %integral of airfoil futempInt160,5814
264
Added:
triangle1 = abs( (web(i).xStart - sparCaps(1).posX)*web(i).zStart/2);triangle1161,5917
265
Added:
triangle2 = abs((web(i).xEnd - sparCaps(1).posX)*web(i).zEnd/2);triangle2162,5991
266
Added:
webTop = web;webTop176,6752
267
Added:
web = [];web177,6766
268
Added:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;dx187,6991
269
Added:
webRearSpar = web;webRearSpar207,8039
270
Added:
web = [];web208,8058
271
Added:
numStringers = numBottomStringers;numStringers212,8082
272
Added:
stringerGap = lowerStringerGap;stringerGap213,8117
273
Added:
webThickness = t_lower;webThickness214,8149
274
Added:
tempStringers = bottomStringers;tempStringers215,8173
275
Added:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;dx223,8489
276
Added:
tempInt = get_int(web(i).xEnd/chord,web(i).xStart/chord,0)*chord^2; %integral of airfoil futempInt238,9196
277
Added:
triangle2 = abs((web(i).xStart - sparCaps(1).posX)*web(i).zStart/2);triangle2239,9299
278
Added:
triangle1 = abs((web(i).xEnd - sparCaps(1).posX)*web(i).zEnd/2);triangle1240,9372
279
Added:
webBottom = web;webBottom256,10207
280
Added:
web = [];web257,10224
281
Added:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;dx267,10451
282
Added:
webFrontSpar = web;webFrontSpar285,11387
283
Added:
web = [];web286,11407
284
Added:
numStringers = numNoseBottomStringers;numStringers294,11453
285
Added:
stringerGap = lowerNoseStringerGap;stringerGap295,11492
286
Added:
webThickness = t_lower_front;webThickness296,11528
287
Added:
tempStringers = noseBottomStringers;tempStringers297,11558
288
Added:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;dx305,11878
289
Added:
tempInt = get_int(web(i).xEnd/chord,web(i).xStart/chord,0)*chord^2; %integral of airfoil futempInt320,12433
290
Added:
triangle1 = abs((web(i).xStart - sparCaps(2).posX)*web(i).zStart/2);triangle1321,12536
291
Added:
triangle2 = abs((web(i).xEnd - sparCaps(2).posX)*web(i).zEnd/2);triangle2322,12609
292
Added:
webLowerNose = web;webLowerNose338,13448
293
Added:
web = [];web339,13468
294
Added:
numStringers = numNoseTopStringers;numStringers342,13496
295
Added:
stringerGap = upperNoseStringerGap;stringerGap343,13532
296
Added:
webThickness = t_upper_front;webThickness344,13568
297
Added:
tempStringers = noseTopStringers;tempStringers345,13598
298
Added:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;dx353,13877
299
Added:
tempInt = get_int(web(i).xStart/chord,web(i).xEnd/chord,1)*chord^2; %integral of airfoil futempInt367,14536
300
Added:
triangle2 = abs((web(i).xStart - sparCaps(2).posX)*web(i).zStart/2);triangle2368,14639
301
Added:
triangle1 = abs((web(i).xEnd - sparCaps(2).posX)*web(i).zEnd/2);triangle1369,14712
302
Added:
webUpperNose = web;webUpperNose384,15474
303
Added:
web = [];web385,15494
304
Added:
dx = web(i).xStart-centroid.posX; dz = web(i).zStart-centroid.posZ;dx396,15722
305
Added:
webFrontSparCell2 = web;webFrontSparCell2414,16666
306
Added:
web = [];web415,16691
307
Added:
Fx = sum([webTop.qp_dx_X])+webRearSpar.qp_dx_X+ sum([webBottom.qp_dx_X])+webFrontSpar.qp_dx_X; Fx420,16736
308
Added:
Fx = Fx + sum([webLowerNose.qp_dx_X])+ sum([webUpperNose.qp_dx_X]); %cell 2Fx421,16840
309
Added:
Fz = sum([webTop.qp_dz_X])+webRearSpar.qp_dz_X+ sum([webBottom.qp_dz_X])+webFrontSpar.qp_dz_X; Fz423,16920
310
Added:
Fz = Fz + sum([webLowerNose.qp_dz_X])+ sum([webUpperNose.qp_dz_X]); %cell 2Fz424,17024
311
Added:
Fx = sum([webTop.qp_dx_Z])+webRearSpar.qp_dx_Z+ sum([webBottom.qp_dx_Z])+webFrontSpar.qp_dx_Z; Fx430,17139
312
Added:
Fx = Fx + sum([webLowerNose.qp_dx_Z])+ sum([webUpperNose.qp_dx_Z]); %cell 2Fx431,17243
313
Added:
Fz = sum([webTop.qp_dz_Z])+webRearSpar.qp_dz_Z+ sum([webBottom.qp_dz_Z])+webFrontSpar.qp_dz_Z; Fz433,17323
314
Added:
Fz = Fz + sum([webLowerNose.qp_dz_Z])+ sum([webUpperNose.qp_dz_Z]); %cell 2Fz434,17427
315
Added:
A11 = sum([webTop.dS_over_t])+webRearSpar.dS_over_t+ sum([webBottom.dS_over_t])+webFrontSpar.dS_A11443,17597
316
Added:
A22 = sum([webLowerNose.dS_over_t])+ sum([webUpperNose.dS_over_t])+webFrontSparCell2.dS_over_t;A22444,17701
317
Added:
A12 = -webFrontSpar.dS_over_t;A12445,17797
318
Added:
A21 = -webFrontSparCell2.dS_over_t;A21446,17828
319
Added:
B1_X = sum([webTop.q_dS_over_t_X])+webRearSpar.q_dS_over_t_X+ sum([webBottom.q_dS_over_t_X])+webB1_X448,17865
320
Added:
B2_X = sum([webLowerNose.q_dS_over_t_X])+ sum([webUpperNose.q_dS_over_t_X])+webFrontSparCell2.q_B2_X449,17986
321
Added:
B1_Z = sum([webTop.q_dS_over_t_Z])+webRearSpar.q_dS_over_t_Z+ sum([webBottom.q_dS_over_t_Z])+webB1_Z450,18095
322
Added:
B2_Z = sum([webLowerNose.q_dS_over_t_Z])+ sum([webUpperNose.q_dS_over_t_Z])+webFrontSparCell2.q_B2_Z451,18216
323
Added:
Amat = [A11 A12; A21 A22];Amat453,18326
324
Added:
Bmat_X = -[B1_X;B2_X];Bmat_X454,18353
325
Added:
Bmat_Z = -[B1_Z;B2_Z];Bmat_Z455,18376
326
Added:
qs_X = inv(Amat)*Bmat_X;qs_X457,18400
327
Added:
qs_Z = inv(Amat)*Bmat_Z;qs_Z458,18425
328
Added:
sum_2_a_q_X = sum([webTop.two_A_qprime_X])+webRearSpar.two_A_qprime_X+ sum([webBottom.two_A_qprisum_2_a_q_X462,18453
329
Added:
sum_2_a_q_X = sum_2_a_q_X + sum([webLowerNose.two_A_qprime_X])+ sum([webUpperNose.two_A_qprime_Xsum_2_a_q_X463,18574
330
Added:
sum_2_a_q_X = sum_2_a_q_X + 2*qs_X(1)*(sum([webTop.Area])+webRearSpar.Area+ sum([webBottom.Areasum_2_a_q_X464,18692
331
Added:
sum_2_a_q_X = sum_2_a_q_X + 2*qs_X(2)*(sum([webLowerNose.Area])+ sum([webUpperNose.Area]));sum_2_a_q_X465,18793
332
Added:
sum_2_a_q_Z = sum([webTop.two_A_qprime_Z])+webRearSpar.two_A_qprime_Z+ sum([webBottom.two_A_qprisum_2_a_q_Z467,18887
333
Added:
sum_2_a_q_Z = sum_2_a_q_Z + sum([webLowerNose.two_A_qprime_Z])+ sum([webUpperNose.two_A_qprime_Zsum_2_a_q_Z468,19008
334
Added:
sum_2_a_q_Z = sum_2_a_q_Z + 2*qs_Z(1)*(sum([webTop.Area])+webRearSpar.Area+ sum([webBottom.Areasum_2_a_q_Z469,19126
335
Added:
sum_2_a_q_Z = sum_2_a_q_Z + 2*qs_Z(2)*(sum([webLowerNose.Area])+ sum([webUpperNose.Area]));sum_2_a_q_Z470,19227
336
Added:
torque_Z = Vz*(sc.posX - 0.25*chord);torque_Z480,19547
337
Added:
torque_X = -Vx*sc.posZ;torque_X481,19585
338
Added:
Area1 = sum([webTop.Area]) + webRearSpar.Area + sum([webBottom.Area]);Area1484,19611
339
Added:
Area1_check = get_int(frontSpar,backSpar,1)*chord^2 + get_int(frontSpar,backSpar,0)*chord^2;Area1_check486,19694
340
Added:
Area2 = sum([webLowerNose.Area]) + sum([webUpperNose.Area]);Area2488,19788
341
Added:
Area2_check = get_int(0,frontSpar,1)*chord^2 + get_int(0,frontSpar,0)*chord^2;Area2_check489,19849
342
Added:
q1t_over_q2t = (A22/Area2 + webFrontSpar.dS_over_t/Area1)/(A11/Area1 + webFrontSpar.dS_over_t/Arq1t_over_q2t494,19984
343
Added:
q2t = torque_X/(2*Area1*q1t_over_q2t + 2*Area2);q2t496,20087
344
Added:
q1t = q2t*q1t_over_q2t;q1t497,20136
345
Added:
qt_X = [q1t;q2t];qt_X498,20160
346
Added:
q2t = torque_Z/(2*Area1*q1t_over_q2t + 2*Area2);q2t500,20179
347
Added:
q1t = q2t*q1t_over_q2t;q1t501,20228
348
Added:
qt_Z = [q1t;q2t];qt_Z502,20252
349
Added:
xChord = 0:.01:1;xChord523,20449
350
Added:
xChord = xChord*chord;xChord524,20467
351
Added:
upperSurface = zeros(1,length(xChord));upperSurface525,20490
352
Added:
lowerSurface = zeros(1,length(xChord));lowerSurface526,20530
353
Added:
vecX = [frontSpar*chord webTop(i).xStart webTop(i).xEnd];vecX541,20927
354
Added:
vecZ = [0 webTop(i).zStart webTop(i).zEnd];vecZ542,20988
355
Added:
vecX = [frontSpar*chord webBottom(i).xStart webBottom(i).xEnd];vecX547,21101
356
Added:
vecZ = [0 webBottom(i).zStart webBottom(i).zEnd];vecZ548,21168
357
Added:
vecX = [frontSpar*chord webUpperNose(i).xStart webUpperNose(i).xEnd];vecX553,21290
358
Added:
vecZ = [0 webUpperNose(i).zStart webUpperNose(i).zEnd];vecZ554,21363
359
Added:
vecX = [frontSpar*chord webLowerNose(i).xStart webLowerNose(i).xEnd];vecX559,21491
360
Added:
vecZ = [0 webLowerNose(i).zStart webLowerNose(i).zEnd];vecZ560,21564
361
Added:
vecX = [frontSpar*chord sparCaps(3).posX sparCaps(4).posX];vecX564,21661
362
Added:
vecZ = [0 sparCaps(3).posZ sparCaps(4).posZ];vecZ565,21724
363
Added:
sparCapSize = 18;sparCapSize569,21808
364
Added:
stringerSize = 18;stringerSize570,21826
365
Added:
366
Added:
/home/blendux/github/UCLA_MAE_154B/gui.py,393
367
Added:
import tkinter as tktk20,820
368
Added:
import tkinter.ttk as ttkttk21,841
369
Added:
class MainWindow(tk.Frame):MainWindow27,963
370
Added:
def __init__(self, *args, **kwargs):__init__30,1022
371
Added:
def create_window(self):create_window64,2364
372
Added:
def new_field(parent, name):new_field72,2661
373
Added:
def set_naca(name):set_naca80,2826
374
Added:
def set_chord(name):set_chord85,2894
375
Added:
def set_semi_span(name):set_semi_span90,2957
376
Added:
377
Added:
/home/blendux/github/UCLA_MAE_154B/README.md,94
378
Added:
# UCLA MAE 154BUCLA MAE 154B1,0
379
Added:
## Spring 2019 Final ProjectSpring 2019 Final Project3,17
380
Added:
381
Added:
/home/blendux/github/UCLA_MAE_154B/tools/evaluator.py,1051
382
Added:
import numpy as npnp24,959
383
Added:
import matplotlib.pyplot as pltplt26,1000
384
Added:
class Evaluator:Evaluator29,1034
385
Added:
def __init__(self, airfoil):__init__32,1130
386
Added:
def __str__(self):__str__56,1932
387
Added:
def info_print(self, round):info_print59,1991
388
Added:
def info_save(self, save_path, number):info_save74,2570
389
Added:
def get_lift_rectangular(self, lift):get_lift_rectangular92,3362
390
Added:
def get_lift_elliptical(self, L_0):get_lift_elliptical96,3507
391
Added:
def get_lift_total(self):get_lift_total103,3719
392
Added:
def get_mass_distribution(self, total_mass):get_mass_distribution108,3900
393
Added:
def get_drag(self, drag):get_drag112,4047
394
Added:
def get_centroid(self):get_centroid124,4473
395
Added:
def get_inertia_terms(self):get_inertia_terms147,5377
396
Added:
def get_dx(self, component):get_dx180,6841
397
Added:
def get_dz(self, component):get_dz183,6940
398
Added:
def get_dP(self, xDist, zDist, V_x, V_z, area):get_dP186,7039
399
Added:
def analysis(self, V_x, V_z):analysis199,7491
400
Added:
def plot_geom(evaluator):plot_geom219,8423
401
Added:
def plot_lift(evaluator):plot_lift272,10194
402
Added:
403
Added:
/home/blendux/github/UCLA_MAE_154B/tools/creator.py,1569
404
Added:
import numpy as npnp31,1142
405
Added:
import bisect as bibi33,1193
406
Added:
import matplotlib.pyplot as pltplt34,1213
407
Added:
class Airfoil:Airfoil37,1247
408
Added:
chord = 100chord51,1727
409
Added:
semi_span = 200semi_span52,1743
410
Added:
def __init__(self):__init__54,1764
411
Added:
def from_dimensions(cls, chord, semi_span):from_dimensions65,2007
412
Added:
def __str__(self):__str__75,2337
413
Added:
def add_naca(self, naca_num):add_naca78,2396
414
Added:
def get_camber(x):get_camber99,3112
415
Added:
def get_thickness(x):get_thickness113,3714
416
Added:
def get_theta(x):get_theta124,4162
417
Added:
def get_upper_coord(x):get_upper_coord132,4452
418
Added:
def get_lower_coord(x):get_lower_coord137,4637
419
Added:
def add_mass(self, mass):add_mass165,5804
420
Added:
def info_print(self, round):info_print168,5860
421
Added:
def info_save(self, save_path, number):info_save183,6442
422
Added:
class Spar(Airfoil):Spar200,7175
423
Added:
def __init__(self):__init__203,7242
424
Added:
def add_coord(self, airfoil, x_loc_percent):add_coord211,7427
425
Added:
def add_spar_caps(self, spar_cap_area):add_spar_caps238,8357
426
Added:
def add_mass(self, mass):add_mass242,8460
427
Added:
def add_webs(self, thickness):add_webs246,8550
428
Added:
class Stringer(Airfoil):Stringer257,8896
429
Added:
def __init__(self):__init__260,8975
430
Added:
def add_coord(self, airfoil,add_coord269,9188
431
Added:
def add_area(self, area):add_area329,11686
432
Added:
def add_mass(self, mass):add_mass333,11762
433
Added:
def add_webs(self, thickness):add_webs337,11873
434
Added:
def info_print(self, round):info_print347,12223
435
Added:
def plot_geom(airfoil, view: False):plot_geom353,12375
436
Added:
def main():main410,14137
437
Added:
438
Added:
/home/blendux/github/UCLA_MAE_154B/tools/generator.py,332
439
Added:
def default_airfoil():default_airfoil23,867
440
Added:
class Population(creator.Airfoil):Population45,1474
441
Added:
def __init__(self, size):__init__48,1551
442
Added:
def mutate(self, prob_mt):mutate54,1720
443
Added:
def crossover(self, prob_cx):crossover57,1824
444
Added:
def reproduce(self, prob_rp):reproduce60,1923
445
Added:
def fitness():fitness63,2034
example_airfoil.py
@@ -10,26 +10,27 @@
10
10
11
11
from tools import creator, evaluator, generator
12
12
13
Added:
13
14
import time
14
15
start_time = time.time()
15
16
16
Removed:
# Airfoil dimensions
17
Added:
# Airfoil dimensions (in)
17
18
NACA_NUM = 2412
18
Removed:
CHORD_LENGTH = 68 # inches
19
Removed:
SEMI_SPAN = 150 # inches
19
Added:
CHORD_LENGTH = 68
20
Added:
SEMI_SPAN = 150
20
21
21
22
# Thicknesses
22
23
SPAR_THICKNESS = 0.4
23
24
SKIN_THICKNESS = 0.1
24
25
25
Removed:
# Component masses
26
Removed:
AIRFOIL_MASS = 10 # lbs
27
Removed:
SPAR_MASS = 10 # lbs
28
Removed:
STRINGER_MASS = 5 # lbs
26
Added:
# Component masses (lbs)
27
Added:
AIRFOIL_MASS = 10
28
Added:
SPAR_MASS = 10
29
Added:
STRINGER_MASS = 5
29
30
30
Removed:
# Area
31
Removed:
SPAR_CAP_AREA = 0.3 # sqin
32
Removed:
STRINGER_AREA = 0.1 # sqin
31
Added:
# Area (sqin)
32
Added:
SPAR_CAP_AREA = 0.3
33
Added:
STRINGER_AREA = 0.1
33
34
34
35
# Amount of stringers
35
36
TOP_STRINGERS = 6
@@ -37,7 +38,7 @@
37
38
NOSE_TOP_STRINGERS = 3
38
39
NOSE_BOTTOM_STRINGERS = 5
39
40
40
Removed:
SAVE_PATH = 'C:/Users/blend/github/UCLA_MAE_154B/save'
41
Added:
SAVE_PATH = '/home/blendux/github/UCLA_MAE_154B/save/'
41
42
42
43
43
44
# Create airfoil instance
@@ -87,9 +88,9 @@
87
88
88
89
pop = generator.Population(10)
89
90
90
Removed:
print(help(creator))
91
Removed:
print(help(evaluator))
92
Removed:
print(help(generator))
91
Added:
# print(help(creator))
92
Added:
# print(help(evaluator))
93
Added:
# print(help(generator))
93
94
94
95
# Print final execution time
95
96
print("--- %s seconds ---" % (time.time() - start_time))
tools/creator.py
@@ -37,7 +37,7 @@
37
37
class Airfoil:
38
38
"""This class represents a single NACA airfoil.
39
39
40
Removed:
Please note: the coordinates are saved as two lists
40
Added:
The coordinates are saved as two lists
41
41
for the x- and z-coordinates. The coordinates start at
42
42
the leading edge, travel over the airfoil's upper edge,
43
43
then loop back to the leading edge via the lower edge.
@@ -69,7 +69,7 @@
69
69
else:
70
70
cls.chord = 20
71
71
print('Chord too small, using minimum value of 20.')
72
Removed:
cls.semi_span = semi_span
72
Added:
cls.semi_span = semi_span
73
73
return Airfoil()
74
74
75
75
def __str__(self):
@@ -175,7 +175,7 @@
175
175
for k, v in self.__dict__.items():
176
176
if type(v) != list:
177
177
print('{}:\n'.format(k), v)
178
Removed:
print(num_of_dashes * '-')
178
Added:
print(num_of_dashes * '-')
179
179
for k, v in self.__dict__.items():
180
180
if type(v) == list:
181
181
print('{}:\n'.format(k), np.around(v, round))
@@ -251,7 +251,7 @@
251
251
self.x_end.append(self.x[_][1])
252
252
self.z_start.append(self.z[_][0])
253
253
self.z_end.append(self.z[_][1])
254
Removed:
self.thickness = thickness
254
Added:
self.thickness = thickness
255
255
return None
256
256
257
257
@@ -296,8 +296,8 @@
296
296
self.x.append(airfoil.x[i])
297
297
self.z.append(airfoil.z[i])
298
298
x += interval
299
Removed:
# Add upper stringers from first spar until last spar
300
Removed:
# TODO: stringer placement if only one spar is created
299
Added:
# Add upper stringers from first spar until last spar
300
Added:
# TODO: stringer placement if only one spar is created
301
301
interval = (airfoil.spar.x[-1][0]
302
302
- airfoil.spar.x[0][0]) / (stringer_u_2 + 1)
303
303
x = interval + airfoil.spar.x[0][0]
@@ -316,7 +316,7 @@
316
316
self.x.append(airfoil.x[-i])
317
317
self.z.append(airfoil.z[-i])
318
318
x += interval
319
Removed:
# Add lower stringers from first spar until last spar
319
Added:
# Add lower stringers from first spar until last spar
320
320
interval = (airfoil.spar.x[-1][1]
321
321
- airfoil.spar.x[0][1]) / (stringer_l_2 + 1)
322
322
x = interval + airfoil.spar.x[0][1]
@@ -342,7 +342,7 @@
342
342
self.x_end.append(self.x[_ + 1])
343
343
self.z_start.append(self.z[_])
344
344
self.z_end.append(self.z[_ + 1])
345
Removed:
self.thickness = thickness
345
Added:
self.thickness = thickness
346
346
return None
347
347
348
348
def info_print(self, round):
@@ -379,7 +379,7 @@
379
379
ax.plot(x, y, '-', color='y', linewidth='4')
380
380
except AttributeError:
381
381
print('No spars to plot.')
382
Removed:
# Plot stringers
382
Added:
# Plot stringers
383
383
try:
384
384
for _ in range(0, len(airfoil.stringer.x)):
385
385
x = airfoil.stringer.x[_]