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]
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]
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]
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]
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]
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 ]