Example 24 - A Tapared Shaft

Contents

Example 24 - A Tapared Shaft#

This example is based on Example 5.9.10 from [Friswell, 2010].

A Tapered Shaft. Consider a tapered shaft of length 1.5 m and a diameter that changes linearly from 25 to 40 mm. A disk of diameter 250 mm and thickness 40 mm is placed at the center of the shaft, and short bearings of stiffness 10 MN/m and damping 1 kNs/m are attached at the ends of the shaft. The Young’s modulus and mass density are 211 GN/mz and 7,810 kg/m3, respectively. Estimate the first pair of natural frequencies of this machine at 3,000 rev/min using a stepped shaft diameter and elements of uniform diameter and by using tapered elements.

import ross as rs
import numpy as np
import plotly.graph_objects as go
from IPython.display import display

# Make sure the default renderer is set to 'notebook' for inline plots in Jupyter
import plotly.io as pio

pio.renderers.default = "notebook"
Q_ = rs.Q_
steel = rs.Material("steel", E=211e9, G_s=81.2e9, rho=7810)
shaft_length = 1.5
diameter_left = 0.025
diameter_right = 0.04

min_elements = 4
max_elements = 30
step = 2
num_simulations = (max_elements - min_elements) // step

results = np.zeros((2, num_simulations))
results_tapared = np.zeros((2, num_simulations))


for i, N in enumerate(range(min_elements, max_elements, step)):
    L = shaft_length / N

    odl_array = np.linspace(diameter_left, diameter_right, N + 1)[:-1]
    idl_array = np.zeros_like(odl_array)

    odr_array = np.linspace(diameter_left, diameter_right, N + 1)[1:]
    idr_array = np.zeros_like(odr_array)

    id_array = np.zeros(N)
    od_array = np.mean(np.array([odl_array, odr_array]), axis=0)

    shaft = []
    shaft_tapared = []

    for n in range(N):
        shaft.append(
            rs.ShaftElement(n=n, L=L, idl=id_array[n], odl=od_array[n], material=steel)
        )
        shaft_tapared.append(
            rs.ShaftElement(
                n=n,
                L=L,
                idl=idl_array[n],
                idr=idr_array[n],
                odl=odl_array[n],
                odr=odr_array[n],
                material=steel,
            )
        )

    bearings = [
        rs.BearingElement(n=0, kxx=1e7, cxx=1e3, scale_factor=2),
        rs.BearingElement(n=N, kxx=1e7, cxx=1e3, scale_factor=2),
    ]
    disks = [
        rs.DiskElement.from_geometry(
            n=N // 2, material=steel, width=0.04, i_d=0.0, o_d=0.25
        ),
    ]

    rotor = rs.Rotor(
        shaft_elements=shaft, disk_elements=disks, bearing_elements=bearings
    )
    rotor_tapared = rs.Rotor(
        shaft_elements=shaft_tapared, disk_elements=disks, bearing_elements=bearings
    )

    modal = rotor.run_modal(speed=Q_(3000, "RPM"))
    modal_tapared = rotor_tapared.run_modal(speed=Q_(3000, "RPM"))

    results[:, i] = Q_(modal.wd[:2], "rad/s").to("Hz").m
    results_tapared[:, i] = Q_(modal_tapared.wd[:2], "rad/s").to("Hz").m

    if N == 6:
        display(rotor.plot_rotor(nodes=2, title=dict(text="Uniform shaft elements")))
        display(
            rotor_tapared.plot_rotor(nodes=2, title=dict(text="Tapared shaft elements"))
        )
fig = go.Figure()

N_eigen = 2

for i in range(N_eigen):
    fig.add_trace(
        go.Scatter(
            x=list(range(min_elements, max_elements, step)),
            y=results[i, :],
            line=dict(dash="dash"),
            name=f"Uniform Elements - Mode {i}",
        )
    )
    fig.add_trace(
        go.Scatter(
            x=list(range(min_elements, max_elements, step)),
            y=results_tapared[i, :],
            name=f"Tapared Elements - Mode {i}",
        )
    )

fig.update_layout(
    xaxis=dict(title="Number of Elements"), yaxis=dict(title="Natural Frequency (Hz)")
)

References#

[Fri10]

Michael I Friswell. Dynamics of rotating machines. Cambridge University Press, 2010.