def _x3_CST(self, x1, diff=None): N1 = 1. N2 = 1. A0 = self.tip_displacement / max(x1) A = [A0] + list(self.D) if diff is None: return (CST(x1, max(x1), deltasz=self.tip_displacement, Au=A, N1=N1, N2=N2)) elif diff == 'x1': psi = x1 / max(x1) return (dxi_u(psi, A, delta_xi, N1=N1, N2=N2)) elif diff == 'x11': return (ddxi_u(psi, A, N1=N1, N2=N2)) elif diff == 'theta3': return (np.zeros(len(x1)))
def integrand(psi, Au, delta_xi): return np.sqrt(1 + dxi_u(psi, Au, delta_xi, N1, N2)**2)
def generate_geometries(length_0, A, TE_displacement, N1, N2, thickness, x_to_track=[]): # new chord current_chord = calculate_c(length_0, A, TE_displacement, N1, N2) # Get coordinates for specific points in the neutral line tracked = {'x': [], 'y': []} for x in x_to_track: tracked['y'].append(current_chord * calculate_deformed_psi( x / length_0, length_0, current_chord, A, TE_displacement)[0]) tracked['x'] = CST(tracked['y'], current_chord, TE_displacement, Au=A, N1=N1, N2=N2) # Get offset values for left side left_tracked = {'x': [], 'y': []} for i in range(len(x_to_track)): dxi = dxi_u(tracked['y'][i] / current_chord, A, TE_displacement / current_chord, N1, N2) xi_component = -dxi / (dxi**2 + 1)**.5 psi_component = 1 / (dxi**2 + 1)**.5 left_tracked['x'].append(tracked['x'][i] - thickness / 2 * psi_component) left_tracked['y'].append(tracked['y'][i] - thickness / 2 * xi_component) # Get offset values for right side right_tracked = {'x': [], 'y': []} for i in range(len(x_to_track)): dxi = dxi_u(tracked['y'][i] / current_chord, A, TE_displacement / current_chord, N1, N2) xi_component = -dxi / (dxi**2 + 1)**.5 psi_component = 1 / (dxi**2 + 1)**.5 right_tracked['x'].append(tracked['x'][i] + thickness / 2 * psi_component) right_tracked['y'].append(tracked['y'][i] + thickness / 2 * xi_component) # non-dimensional y coordinates (extend it a little on the bottom to guarantee nice shape) psi = np.linspace(-.1, current_chord, 1000) # non-dimensional x coordinates xi = CST(psi, current_chord, TE_displacement, Au=A, N1=N1, N2=N2) fig = plt.figure(1, figsize=SIZE, dpi=90) ax = fig.add_subplot(111) ax.set_aspect('equal') # Genrate neutral line line = LineString(zip(xi, psi)) # Create offsets to neutral line offset_left = line.parallel_offset(thickness / 2., 'left', join_style=1) offset_right = line.parallel_offset(thickness / 2., 'right', join_style=1) # Create baffle coords = (offset_left.coords[:] + offset_right.coords[::] + [offset_left.coords[0]]) main = Polygon(coords) # Remove base material coords = ((-1, 0), (-1, -1), (1, -1), (1, 0), (-1, 0)) root = Polygon(coords) main = main.difference(root) # Plot tracked points plt.scatter(right_tracked['x'], right_tracked['y'], c='c') plt.scatter(left_tracked['x'], left_tracked['y'], c='g') plt.scatter([0] * len(x_to_track), x_to_track, c='b') plt.scatter(tracked['x'], tracked['y'], c='r') # Plot geometry skin_patch = PolygonPatch(main, facecolor='#808080', edgecolor='#808080', alpha=0.5, zorder=2) ax.add_patch(skin_patch) plt.xlabel('x', fontsize=14) plt.ylabel('y', fontsize=14) plt.grid() plt.show() # Get the flag flags = [] x, y = find_point_inside(main) flags.append((x, y)) # Export data data_main = extract_poly_coords(main) data = { 'model': data_main, 'flags': flags, 'left': left_tracked, 'right': right_tracked } output_file = 'curves.p' fileObject = open(output_file, 'wb') pickle.dump(data, fileObject) fileObject.close()
def generate_geometries_animate(length_0, A, TE_displacement, N1, N2, thickness, x_to_track=[]): # new chord current_chord = calculate_c(length_0, A, TE_displacement, N1, N2) # Get coordinates for specific points in the neutral line tracked = {'x': [], 'y': []} for x in x_to_track: tracked['y'].append(current_chord * calculate_deformed_psi( x / length_0, length_0, current_chord, A, TE_displacement)[0]) tracked['x'] = CST(tracked['y'], current_chord, TE_displacement, Au=A, N1=N1, N2=N2) # Get offset values for left side left_tracked = {'x': [], 'y': []} for i in range(len(x_to_track)): dxi = dxi_u(tracked['y'][i] / current_chord, A, TE_displacement / current_chord) xi_component = -dxi / (dxi**2 + 1)**.5 psi_component = 1 / (dxi**2 + 1)**.5 left_tracked['x'].append(tracked['x'][i] - thickness / 2 * psi_component) left_tracked['y'].append(tracked['y'][i] - thickness / 2 * xi_component) # Get offset values for right side right_tracked = {'x': [], 'y': []} for i in range(len(x_to_track)): dxi = dxi_u(tracked['y'][i] / current_chord, A, TE_displacement / current_chord) xi_component = -dxi / (dxi**2 + 1)**.5 psi_component = 1 / (dxi**2 + 1)**.5 right_tracked['x'].append(tracked['x'][i] + thickness / 2 * psi_component) right_tracked['y'].append(tracked['y'][i] + thickness / 2 * xi_component) # non-dimensional y coordinates (extend it a little on the bottom to guarantee nice shape) psi = np.linspace(-.1, current_chord, 1000) # non-dimensional x coordinates xi = CST(psi, current_chord, TE_displacement, Au=A, N1=N1, N2=N2) # Genrate neutral line line = LineString(zip(xi, psi)) # Create offsets to neutral line offset_left = line.parallel_offset(thickness / 2., 'left', join_style=1) offset_right = line.parallel_offset(thickness / 2., 'right', join_style=1) # Create baffle coords = (offset_left.coords[:] + offset_right.coords[::] + [offset_left.coords[0]]) main = Polygon(coords) # Remove base material coords = ((-1, 0), (-1, -1), (1, -1), (1, 0), (-1, 0)) root = Polygon(coords) main = main.difference(root) # 3Plot tracked points # plt.scatter(right_tracked['x'],right_tracked['y'],c='c') # plt.scatter(left_tracked['x'],left_tracked['y'],c='g') # plt.scatter([0]*len(x_to_track),x_to_track, c='b') # plt.scatter(tracked['x'],tracked['y'], c='r') # Plot geometry skin_patch = PolygonPatch(main, facecolor='#909090', edgecolor='#909090', alpha=0.5, zorder=2) return skin_patch
# Shape coefficients A = [-TE_displacement, 0.2] # new chord current_chord = calculate_c(length_0, A, TE_displacement, N1, N2) #current_chord = 1 # non-dimensional y coordinates y = np.linspace(0, current_chord) # non-dimensional x coordinates x = CST(y, current_chord, TE_displacement, Au=A, N1=N1, N2=N2) dxi = dxi_u(psi=np.array(y) / current_chord, Au=A, delta_xi=TE_displacement / current_chord, N1=N1, N2=N2) # Plotting plt.plot(x, y, label='A = ' + str(A[0])) plt.plot(dxi, y, label='dxi') plt.axis('equal') plt.legend() plt.grid() plt.xlabel(r'$x$', fontsize=14.) plt.ylabel('$y$', fontsize=14.) plt.show() length_0 = 1. for TE_displacement in np.linspace(0, 0.4, 3):