예제 #1
0
def calc_tor_stiff(wheel,
                   theta=0.,
                   N=20,
                   smeared_spokes=True,
                   tension=True,
                   buckling=True,
                   coupling=True,
                   r0=False):
    'Calculate torsional (wind-up) stiffness in [N/rad].'

    mm = ModeMatrix(wheel, N=N)

    F_ext = mm.F_ext(theta, [0., 0., 1., 0.])
    d = np.zeros(F_ext.shape)

    K = (mm.K_rim(tension=buckling, r0=r0) +
         mm.K_spk(tension=tension, smeared_spokes=smeared_spokes))

    if coupling:
        d = np.linalg.solve(K, F_ext)
    else:
        ix_uc = mm.get_ix_uncoupled(dim='radial')
        K = mm.get_K_uncoupled(K=K, dim='radial')
        d[ix_uc] = np.linalg.solve(K, F_ext[ix_uc])

    return wheel.rim.radius / mm.B_theta(theta).dot(d)[2]
예제 #2
0
def calc_lat_stiff(wheel,
                   theta=0.,
                   N=20,
                   smeared_spokes=True,
                   tension=True,
                   buckling=True,
                   coupling=False,
                   r0=False):
    'Calculate lateral stiffness.'

    mm = ModeMatrix(wheel, N=N)

    F_ext = mm.F_ext(0., [1., 0., 0., 0.])
    d = np.zeros(F_ext.shape)

    K = (mm.K_rim(tension=buckling, r0=r0) +
         mm.K_spk(tension=tension, smeared_spokes=smeared_spokes))

    if coupling:
        d = np.linalg.solve(K, F_ext)
    else:
        ix_uc = mm.get_ix_uncoupled(dim='lateral')
        K = mm.get_K_uncoupled(K=K, dim='lateral')
        d[ix_uc] = np.linalg.solve(K, F_ext[ix_uc])

    return 1. / mm.B_theta(0.).dot(d)[0]
예제 #3
0
def calc_rad_stiff(wheel):
    'Calculate radial stiffness.'

    # Create a ModeMatrix model with 24 modes
    mm = ModeMatrix(wheel, N=24)

    # Calculate stiffness matrix
    K = mm.K_rim(tension=True) + mm.K_spk(smeared_spokes=False, tension=True)

    # Create a unit radial load pointing radially inwards at theta=0
    F_ext = mm.F_ext(0., np.array([0., 1., 0., 0.]))

    # Solve for the mode coefficients
    dm = np.linalg.solve(K, F_ext)

    return 1e-6 / mm.rim_def_rad(0., dm)[0]
예제 #4
0
def calc_rot_stiff(wheel):
    'Calculate rotational (wind-up) stiffness.'

    # Create a ModeMatrix model with 24 modes
    mm = ModeMatrix(wheel, N=24)

    # Calculate stiffness matrix
    K = mm.K_rim(tension=True) + mm.K_spk(smeared_spokes=False, tension=True)

    # Create a unit tangential load at theta=0
    F_ext = mm.F_ext(0., np.array([0., 0., 1., 0.]))

    # Solve for the mode coefficients
    dm = np.linalg.solve(K, F_ext)

    return 1e-3*np.pi/180*wheel.rim.radius / mm.rim_def_tan(0., dm)[0]
예제 #5
0
def calc_lat_stiff(wheel):
    'Calculate lateral (side-load) stiffness.'

    # Create a ModeMatrix model with 24 modes
    mm = ModeMatrix(wheel, N=24)

    # Calculate stiffness matrix
    K = mm.K_rim(tension=True) + mm.K_spk(smeared_spokes=False, tension=True)

    # Create a unit lateral load at theta=0
    F_ext = mm.F_ext(0., np.array([1., 0., 0., 0.]))

    # Solve for the mode coefficients
    dm = np.linalg.solve(K, F_ext)

    return 1e-3 / mm.rim_def_lat(0., dm)[0]
예제 #6
0
def calc_buckling_tension_modematrix(wheel,
                                     smeared_spokes=False,
                                     coupling=True,
                                     r0=True,
                                     N=24):
    'Estimate buckling tension from condition number of stiffness matrix.'

    mm = ModeMatrix(wheel, N=N)

    K_matl = (mm.K_rim_matl(r0=r0) +
              mm.K_spk(tension=False, smeared_spokes=smeared_spokes))

    K_geom = (mm.K_rim_geom(r0=r0) -
              mm.K_spk_geom(smeared_spokes=smeared_spokes))

    # Solve generalized eigienvalue problem:
    #   (K_matl + T*K_geom)
    if coupling:
        w, v = eig(K_matl, K_geom)
    else:
        w, v = eig(mm.get_K_uncoupled(K_matl), mm.get_K_uncoupled(K_geom))

    return np.min(np.real(w)[np.real(w) > 0])
예제 #7
0
                I_lat=200. / 69e9,
                I_rad=100. / 69e9,
                J_tor=25. / 26e9,
                I_warp=0.0,
                young_mod=69e9,
                shear_mod=26e9)
wheel.lace_cross(n_spokes=36, n_cross=3, diameter=2.0e-3, young_mod=210e9)

# Create a ModeMatrix model with 24 modes
mm = ModeMatrix(wheel, N=24)

# Create a 500 Newton pointing radially inwards at theta=0
F_ext = mm.F_ext(0., np.array([0., 500., 0., 0.]))

# Calculate stiffness matrix
K = mm.K_rim(tension=False) + mm.K_spk(smeared_spokes=False, tension=False)

# Solve for the mode coefficients
dm = np.linalg.solve(K, F_ext)

# Get radial deflection
theta = np.linspace(-np.pi, np.pi, 100)
rad_def = mm.rim_def_rad(theta, dm)

# Calculate change in spoke tensions
dT = [
    -s.EA / s.length * np.dot(s.n,
                              mm.B_theta(s.rim_pt[1], comps=[0, 1, 2]).dot(dm))
    for s in wheel.spokes
]