Example 32 - Response to Forces Applied through Auxiliary Bearings#

This example is based on Example 6.3.3 page 264 from [Friswell, 2010].

The rotor-bearing system described in Example 6.3.1 (and shown in Figure 6.18 - Page 253) rotates at 3,000 rev/min. Each bearing has a stiffness of 1 MN/m and a damping of 100 Ns/m in both the x and y directions. For test purposes, the rotor is excited via an auxiliary bearing that is attached to the rotor at midspan. Determine the response of the disk at node 3 to forces acting on an auxiliary bearing. The system is modeled using six elements, giving 28 degrees of freedom. The forces at the auxiliary bearing are (a) a rotating out-of-balance of 0.0001 kg.m, and (b) a harmonic force of 10 N.

import ross as rs
import numpy as np
from ross import Probe
from ross.units import Q_

import plotly.graph_objects as go
steel = rs.Material("steel", E=211e9, G_s=81.1e9, rho=7810)

Creating Rotor#

# Shaft parameters
shaft_length = 1.5  # meters
shaft_diameter = 0.05  # meters
n_elements = 6
L_elem = shaft_length / n_elements

shaft_elements = [
    rs.ShaftElement(
        L=L_elem,
        idl=0.0,
        odl=shaft_diameter,
        material=steel,
        shear_effects=True,
        rotary_inertia=True,
        gyroscopic=True,
    )
    for _ in range(n_elements)
]

# Disk parameters
disk1 = rs.DiskElement.from_geometry(
    n=2,
    material=steel,
    width=0.070,
    i_d=shaft_diameter,
    o_d=0.280,
)
disk2 = rs.DiskElement.from_geometry(
    n=4,
    material=steel,
    width=0.070,
    i_d=shaft_diameter,
    o_d=0.350,
)


# Bearings at ends (nodes 0 and 6)
kxx = 1e6  # N/m
cxx = 100  # Ns/m
bearing1 = rs.BearingElement(
    n=0,
    kxx=kxx,
    kyy=kxx,
    cxx=cxx,
)
bearing2 = rs.BearingElement(
    n=6,
    kxx=kxx,
    kyy=kxx,
    cxx=cxx,
)

# Assemble rotor
rotor = rs.Rotor(
    shaft_elements=shaft_elements,
    disk_elements=[disk1, disk2],
    bearing_elements=[bearing1, bearing2],
)
rotor.plot_rotor()

Response for a rotating out-of-balance#

# Unbalance excitation at midspan (node 3)
unbalance_response = rotor.run_unbalance_response(
    node=3,
    unbalance_magnitude=0.0001,
    unbalance_phase=0,
    frequency=Q_(np.linspace(0, 4000, 1000), "RPM"),
)

fig2 = unbalance_response.plot_magnitude(
    probe=[Probe(2, Q_(90, "deg"))], yaxis=dict(type="log"), frequency_units="RPM"
)
fig2.update_layout(yaxis_range=[-8, -2])
fig2.show()

Response due to vertical a harmonic excitation at the auxiliary bearing#

F0 = 10
node = 3
probe = 2

speed_range = Q_([100, 500, 1000, 2000, 3000], "RPM")
frequency_range = Q_(np.linspace(0, 65, 1000), "Hz").to_base_units().m
t = np.arange(0, 10, 0.001)

num_dof = rotor.number_dof

fig = go.Figure()

for speed in speed_range:
    probe_resp = []

    for w in frequency_range:
        # Create vertical harmonic force
        F = np.zeros((len(t), rotor.ndof))

        dofy = num_dof * node + 1
        F[:, dofy] += F0 * np.sin(w * t)

        # Run time response
        time_resp = rotor.run_time_response(speed, F, t)

        # Extract response for the probe
        response = time_resp.yout

        init_step = int(2 * len(t) / 3)

        dofx = num_dof * probe
        dofy = num_dof * probe + 1

        x = response[init_step:, dofx] * 0
        y = response[init_step:, dofy]

        lateral_max = max(max(abs(x)), max(abs(y)))
        probe_resp.append(lateral_max)

    # Adding the response to figure
    fig.add_trace(
        go.Scatter(
            x=Q_(frequency_range, "rad/s").to("Hz").m,
            y=np.array(probe_resp),
            mode="lines",
            name=f"{speed.to('RPM').m} RPM",
            line=dict(width=2),
        )
    )

Plotting response#

fig.update_layout(
    xaxis=dict(title="Frequency (Hz)"),
    yaxis=dict(
        title="Amplitude (m)",
        type="log",
        range=[-8, -2],
        exponentformat="power",
    ),
    legend=dict(
        title=dict(text="Rotor Speed"),
    ),
)

fig.show()