Пример #1
0
 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)))
Пример #2
0
 def integrand(psi, Au, delta_xi):
     return np.sqrt(1 + dxi_u(psi, Au, delta_xi, N1, N2)**2)
Пример #3
0
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()
Пример #4
0
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
Пример #5
0
# 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):