Final Stringer.add implementation

Commit
8bbc799672b95d71ff80759c0f8bf30bc11f9c19
Author
Marius Peter <blendoit@gmail.com>
Author date
Committer
Marius Peter <blendoit@gmail.com>
Committer date
Changed files
creator.py
index 5ac4c06f..c6cae4ee 100644..100644
@@ -78,19 +78,11 @@
78 78 print('Chord length:', self.chord)
79 79 print('Semi-span:', self.semi_span)
80 80 print('============================')
81 Removed: print('x_u the upper x-coordinates:',
82 Removed: np.around(self.x_u, round),
83 Removed: sep='\n')
84 Removed: print('y_u the upper y-coordinates:',
85 Removed: np.around(self.y_u, round),
86 Removed: sep='\n')
87 Removed: print('x_l the lower x-coordinates:',
88 Removed: np.around(self.x_l, round),
89 Removed: sep='\n')
90 Removed: print('y_l the lower y-coordinates:',
91 Removed: np.around(self.y_l, round),
92 Removed: sep='\n')
93 Removed: print('\n')
81 Added: print('x_u the upper x-coordinates:\n', np.around(self.x_u, round))
82 Added: print('y_u the upper y-coordinates:\n', np.around(self.y_u, round))
83 Added: print('x_l the lower x-coordinates:\n', np.around(self.x_l, round))
84 Added: print('y_l the lower y-coordinates:\n', np.around(self.y_l, round))
85 Added: # print('\n')
94 86 return None
95 87
96 88 def save_coord(self, save_dir_path):
@@ -140,7 +132,6 @@
140 132
141 133 Parameters:
142 134 naca_num: 4-digit NACA wing
143 Removed: chord: wing chord length, in any unit
144 135
145 136 Return:
146 137 None
@@ -284,22 +275,23 @@
284 275
285 276
286 277 class Stringer(Coordinates):
287 Removed: """Contains the coordinates of stringer(s)."""
278 Added: """Contains the coordinates of all stringers."""
288 279 global parent
289 280
290 281 def __init__(self):
291 282 super().__init__(parent.chord, parent.semi_span)
292 283
293 Removed: def add(self, airfoil_coord, spar_coord, den_u_1, den_u_2, den_l_1,
294 Removed: den_l_2):
284 Added: def add(self, airfoil_coord, spar_coord, stringer_u_1, stringer_u_2,
285 Added: stringer_l_1, stringer_l_2):
295 286 """
296 Removed: Add stringers to the wing from their density distribution.
287 Added: Add equally distributed stringers to four airfoil locations
288 Added: (upper nose, lower nose, upper surface, lower surface).
297 289
298 290 Parameters:
299 Removed: den_u_1: upper nose stringer density (until first spar)
300 Removed: den_u_2: upper surface stringer density
301 Removed: den_l_1: lower nose stringer density (until first spar)
302 Removed: den_l_2: lower surface stringer density
291 Added: stringer_u_1: upper nose number of stringers
292 Added: stringer_u_2: upper surface number of stringers
293 Added: stringer_l_1: lower nose number of stringers
294 Added: stringer_l_2: lower surface number of stringers
303 295
304 296 Returns:
305 297 None
@@ -311,40 +303,52 @@
311 303 airfoil_y_u = airfoil_coord[1]
312 304 airfoil_x_l = airfoil_coord[2]
313 305 airfoil_y_l = airfoil_coord[3]
314 Removed:
315 306 # Spar coordinates
316 307 # unpacked from 'coordinates' (list of lists in 'Coordinates').
317 Removed: spar_x_u = spar_coord[0]
318 Removed: spar_y_u = spar_coord[1]
319 Removed: spar_x_l = spar_coord[2]
320 Removed: spar_y_l = spar_coord[3]
321 Removed:
322 Removed: # Find distance between leading edge and first upper stringer,
323 Removed: # from density parameter den_u_1.
324 Removed: interval = den_u_1 * spar_x_u[0]
325 Removed: # initialise first self.stringer_x_u at first interval.
308 Added: try:
309 Added: spar_x_u = spar_coord[0]
310 Added: spar_y_u = spar_coord[1]
311 Added: spar_x_l = spar_coord[2]
312 Added: spar_y_l = spar_coord[3]
313 Added: except:
314 Added: print('Unable to initialize stringers. Were spars created?')
315 Added: # Find distance between leading edge and first upper stringer
316 Added: interval = spar_x_u[0] / (stringer_u_1 + 1)
317 Added: # initialise first self.stringer_x_u at first interval
326 318 x = interval
327 Removed: # Add upper stringers until first spar.
328 Removed: while x < spar_x_u[0]:
319 Added: # Add upper stringers from leading edge until first spar.
320 Added: for _ in range(0, stringer_u_1):
329 321 # Index of the first value of airfoil_x_u > x
330 322 index = bi.bisect_left(airfoil_x_u, x)
331 Removed: # Append the value of airfoil_x_u at index to stringer's coordinates
332 323 self.x_u.append(airfoil_x_u[index])
333 324 self.y_u.append(airfoil_y_u[index])
334 325 x += interval
326 Added: # Add upper stringers from first spar until last spar
327 Added: interval = (spar_x_u[-1] - spar_x_u[0]) / (stringer_u_2 + 1)
328 Added: x = interval + spar_x_u[0]
329 Added: for _ in range(0, stringer_u_2):
330 Added: index = bi.bisect_left(airfoil_x_u, x)
331 Added: self.x_u.append(airfoil_x_u[index])
332 Added: self.y_u.append(airfoil_y_u[index])
333 Added: x += interval
335 334
336 Removed: # Find interval between leading edge and first lower stringer,
337 Removed: # from density parameter den_l_1.
338 Removed: interval = den_l_1 * spar_x_u[0]
339 Removed: # initialise first self.stringer_x_l at first interval.
335 Added: # Find distance between leading edge and first lower stringer
336 Added: interval = spar_x_l[0] / (stringer_l_1 + 1)
340 337 x = interval
341 Removed: # Add lower stringers until first spar.
342 Removed: while x < spar_x_l[0]:
343 Removed: # Index of the first value of self.x_l > x
338 Added: # Add lower stringers from leading edge until first spar.
339 Added: for _ in range(0, stringer_l_1):
344 340 index = bi.bisect_left(airfoil_x_l, x)
345 Removed: self.x_u.append(airfoil_x_u[index])
346 Removed: self.y_u.append(airfoil_y_u[index])
341 Added: self.x_l.append(airfoil_x_l[index])
342 Added: self.y_l.append(airfoil_y_l[index])
347 343 x += interval
344 Added: # Add lower stringers from first spar until last spar
345 Added: interval = (spar_x_l[-1] - spar_x_l[0]) / (stringer_l_2 + 1)
346 Added: x = interval + spar_x_l[0]
347 Added: for _ in range(0, stringer_l_2):
348 Added: index = bi.bisect_left(airfoil_x_l, x)
349 Added: self.x_l.append(airfoil_x_l[index])
350 Added: self.y_l.append(airfoil_y_l[index])
351 Added: x += interval
348 352
349 353 super().pack_coord()
350 354 return None
@@ -375,16 +379,23 @@
375 379 for _ in range(0, len(spar.x_u)):
376 380 x = (spar.x_u[_], spar.x_l[_])
377 381 y = (spar.y_u[_], spar.y_l[_])
378 Removed: plt.plot(x, y, '.-', color='b', label='spar')
382 Added: plt.plot(x, y, '.-', color='b')
379 383 plt.legend()
380 384 except:
381 385 print('Did not plot spars. Were they added?')
382 386
383 387 # Plot stringers
384 388 try:
389 Added: # Upper stringers
385 390 for _ in range(0, len(stringer.x_u)):
386 Removed: x = (spar.x_u[_], spar.x_l[_])
387 Removed: y = (spar.y_u[_], spar.y_l[_])
391 Added: x = stringer.x_u[_]
392 Added: y = stringer.y_u[_]
393 Added: plt.plot(x, y, '.', color='y')
394 Added: # Lower stringers
395 Added: for _ in range(0, len(stringer.x_l)):
396 Added: x = stringer.x_l[_]
397 Added: y = stringer.y_l[_]
398 Added: plt.plot(x, y, '.', color='y')
388 399 except:
389 400 print('Unable to plot stringers. Were they created?')
390 401
main.py
index 17d081ac..909547eb 100644..100644
@@ -21,7 +21,7 @@
21 21 import time
22 22 start_time = time.time()
23 23
24 Removed: CHORD_LENGTH = 40
24 Added: CHORD_LENGTH = 100
25 25 SEMI_SPAN = 200
26 26
27 27 POP_SIZE = 1
@@ -38,26 +38,26 @@
38 38 af = creator.Airfoil()
39 39 # Define NACA airfoil coordinates
40 40 af.add_naca(2412)
41 Added: af.print_coord(2)
41 42
42 43 # Create spar instance
43 44 af.spar = creator.Spar()
44 45 # Define the spar coordinates, stored in single spar object
45 46 af.spar.add(af.coord, 0.15)
46 47 af.spar.add(af.coord, 0.55)
47 Removed: # Print coordinates of af.spar to terminal
48 Added: af.spar.print_coord(2)
48 49
49 50 # Create stringer instance
50 51 af.stringer = creator.Stringer()
51 Removed: # Define the stringer coordinates from airfoil's and spars'
52 Removed: af.stringer.add(af.coord, af.spar.coord, 0.2, 0.2, 0.2, 0.2)
52 Added: # Define the stringer coordinates from their amount
53 Added: af.stringer.add(af.coord, af.spar.coord, 10, 7, 5, 6)
53 54 # Print coordinates of af.stringer to terminal
54 Removed: # af.stringer.print_coord(2)
55 Added: af.stringer.print_coord(2)
55 56
56 Removed: print(af.stringer.coord)
57 57 # Plot components with matplotlib
58 58 creator.plot(af, af.spar, af.stringer)
59 59
60 Removed: # # Save component coordinates
60 Added: # Save component coordinates
61 61 # af.save_coord(SAVE_PATH)
62 62 # af.spar.save_coord(SAVE_PATH)
63 63