Rotor.run_freq_response(speed_range=None, modes=None, cluster_points=False, num_modes=12, num_points=10, rtol=0.005)#

Frequency response for a mdof system.

This method returns the frequency response for a mdof system given a range of frequencies and the modes that will be used.

Available plotting methods:

.plot() .plot_magnitude() .plot_phase() .plot_polar_bode()

speed_rangearray, optional

Array with the desired range of frequencies. Default is 0 to 1.5 x highest damped natural frequency.

modeslist, optional

Modes that will be used to calculate the frequency response (all modes will be used if a list is not given).

cluster_pointsbool, optional

boolean to activate the automatic frequency spacing method. If True, the method uses _clustering_points() to create an speed_range. Default is False

num_pointsint, optional

The number of points generated per critical speed. The method set the same number of points for slightly less and slightly higher than the natural circular frequency. It means there’ll be num_points greater and num_points smaller than a given critical speed. num_points may be between 2 and 12. Anything above this range defaults to 10 and anything below this range defaults to 4. The default is 10.


The number of eigenvalues and eigenvectors to be calculated using ARPACK. It also defines the range for the output array, since the method generates points only for the critical speed calculated by run_critical_speed(). Default is 12.

rtolfloat, optional

Tolerance (relative) for termination. Applied to scipy.optimize.newton to calculate the approximated critical speeds. Default is 0.005 (0.5%).


For more information on attributes and methods available see: ross.FrequencyResponseResults


>>> import ross as rs
>>> rotor = rs.rotor_example()
>>> speed = np.linspace(0, 1000, 101)
>>> response = rotor.run_freq_response(speed_range=speed)

Return the response amplitude >>> abs(response.freq_resp) # doctest: +ELLIPSIS array([[[1.00000000e-06, 1.00261725e-06, 1.01076952e-06, …

Return the response phase >>> np.angle(response.freq_resp) # doctest: +ELLIPSIS array([[[…

Using clustered points option. Set cluster_points=True and choose how many modes the method must search and how many points to add just before and after each critical speed.

>>> response = rotor.run_freq_response(cluster_points=True, num_points=5)
>>> response.speed_range.shape

Selecting the disirable modes, if you want a reduced model: >>> response = rotor.run_freq_response(speed_range=speed, modes=[0, 1, 2]) >>> abs(response.freq_resp) # doctest: +ELLIPSIS array([[[2.00154633e-07, 2.02422522e-07, 2.09522044e-07, …

Plotting frequency response function: >>> fig = response.plot(inp=13, out=13)

To plot velocity and acceleration responses, you must change amplitude_units from “[length]/[force]” units to “[speed]/[force]” or “[acceleration]/[force]” respectively

Plotting velocity response >>> fig = response.plot(inp=13, out=13, amplitude_units=”m/s/N”)

Plotting acceleration response >>> fig = response.plot(inp=13, out=13, amplitude_units=”m/s**2/N”)