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

Forced response for a mdof system.

This method returns the unbalanced response for a mdof system given magnitude and phase of the unbalance, the node where it’s applied and a frequency range.

Available plotting methods:

.plot() .plot_magnitude() .plot_phase() .plot_polar_bode() .plot_deflected_shape() .plot_bending_moment() .plot_deflected_shape_3d() .plot_deflected_shape_2d()

forcelist, array

Unbalance force in each degree of freedom for each value in omega

speed_rangelist, array

Array with the desired range of frequencies

modeslist, optional

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

unbalancearray, optional

Array with the unbalance data (node, magnitude and phase) to be plotted with deflected shape. This argument is set only if running an unbalance response analysis. Default is None.

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.ForcedResponseResults


>>> rotor = rotor_example()
>>> speed = np.linspace(0, 1000, 101)
>>> force = rotor._unbalance_force(3, 10.0, 0.0, speed)
>>> resp = rotor.run_forced_response(force=force, speed_range=speed)
>>> abs(resp.forced_resp) 
array([[0.00000000e+00, 5.06073311e-04, 2.10044826e-03, ...

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_forced_response(
...     force=force, cluster_points=True, num_modes=12, num_points=5
... )
>>> response.speed_range.shape