Parametrically excited Rayleigh oscillator

MMS example on a Rayleigh oscillator subject to parametric forcing. This configuration was studied by Nayfeh and Mook [2], section 5.7.2. Note that the Rayleigh oscillator is quite similar to the Van der Pol oscillator as they are both associated to damping nonlinearities.

System description

Nonlinear system.

Illustration of a parametrically forced Rayleigh oscillator through the time-varying stiffness \(\omega_0^2 + 2 F \cos(\omega t)\).

The system’s equation is

\[\ddot{x} + c \dot{x} + \gamma \dot{x}^{3} + \omega_{0}^{2} x = -2x F \cos(\omega t),\]

where

  • \(x\) is the oscillator’s coordinate,

  • \(t\) is the time,

  • \(\dot{(\bullet)} = \mathrm{d}(\bullet)/\mathrm{d}t\) is a time derivative,

  • \(c\) is the linear viscous damping coefficient,

  • \(\omega_0\) is the oscillator’s natural frequency,

  • \(\gamma\) is the nonlinear damping coefficient,

  • \(F\) is the forcing amplitude,

  • \(\omega\) is the forcing frequency.

A parametric response around twice the oscillator’s frequency is sought so the frequency is set to

\[\omega = 2\omega_0 + \epsilon \sigma\]

where

  • \(\epsilon\) is a small parameter involved in the MMS,

  • \(\sigma\) is the detuning.

The parameters are then scaled to indicate how weak they are:

  • \(c = \epsilon \tilde{c}\) indicates that damping is weak,

  • \(F = \epsilon \tilde{F}\) indicates that forcing is weak,

  • \(\gamma = \epsilon \tilde{\gamma}\) indicates that nonlinear damping is weak.

Code description

The script below allows to

  • Construct the dynamical system.

  • Apply the MMS to the system,

  • Evaluate the MMS results at steady state,

  • Compute the forced response and the backbone curve,

  • Evaluate the stability of the computed forced solution.

 1# -*- coding: utf-8 -*-
 2
 3#%% Imports and initialisation
 4from sympy import symbols, Function
 5from sympy.physics.vector.printing import init_vprinting, vlatex
 6init_vprinting(use_latex=True, forecolor='White') # Initialise latex printing 
 7from oscilate import MMS
 8
 9# Parameters and variables
10omega0, F, c = symbols(r'\omega_0, F, c', real=True,positive=True)
11gamma        = symbols(r'\gamma',real=True)
12t            = symbols('t')
13x            = Function(r'x', real=True)(t)
14
15# Dynamical system
16Eq = x.diff(t,2) + omega0**2*x + gamma*x.diff(t)**3 - c*x.diff(t) 
17fF = -2*x # Parametric forcing
18dyn = MMS.Dynamical_system(t, x, Eq, omega0, fF=fF, F=F)
19
20# Initialisation of the MMS sytem
21eps            = symbols(r"\epsilon", real=True, positive=True) # Small parameter epsilon
22Ne             = 1      # Order of the expansions
23omega_ref      = omega0 # Reference frequency
24ratio_omegaMMS = 2      # Look for a solution around 2*omega_ref
25
26param_to_scale = (gamma, F , c )
27scaling        = (1    , Ne, Ne)
28param_scaled, sub_scaling = MMS.scale_parameters(param_to_scale, scaling, eps)
29
30mms = MMS.Multiple_scales_oscillator(dyn, eps, Ne, omega_ref, sub_scaling, ratio_omegaMMS=ratio_omegaMMS)
31
32# Application of the MMS
33mms.apply_MMS(orders_polar="all")
34
35# Evaluation at steady state
36ss = MMS.Steady_state(mms)
37
38# Solve the evolution equations for a given dof
39solve_dof = 0 # dof to solve for
40ss.solve_bbc(solve_dof=solve_dof, c=param_scaled[-1])
41ss.solve_forced(solve_dof=solve_dof)
42
43# Stability analysis
44ss.stability_analysis_forced(coord="polar", eigenvalues=True)
45
46# Plot the steady state results
47# -----------------------------
48
49# Set parameters' numerical values
50import numpy as np
51param = [(omega0, 1),
52         (c, 1e-1),
53         (gamma, 1e-1),
54         (ss.coord.a[0], np.linspace(1e-10, 2, 1000))]
55
56# Frequency response
57param_FRC = param + [(dyn.forcing.F, 1e-1)]
58BBC = MMS.visualisation.Backbone_curve(mms, ss, dyn, param_FRC)
59FRC = MMS.visualisation.Frequency_response_curve(mms, ss, dyn, param_FRC, bif=False)
60FRC.plot(ss=ss, bbc=BBC)
61
62# Amplitude response
63param_ARC = param + [(mms.omega, 2.02)]
64ARC = MMS.visualisation.Amplitude_response_curve(mms, ss, dyn, param_ARC)
65ARC.plot(ss=ss)
66
67# %%

Plot outputs

The plot outputs shown below are generated from the code above.

Frequency response curve

The two figures below display the amplitude and phase responses (blue) of the \(1^{\text{st}}\) harmonic of the Duffing oscillator as a function of the excitation frequency.

Frequency response curve - amplitude

Frequency response curve of the Rayleigh oscillator (amplitude).

Frequency response curve - phase

Frequency response curve of the Rayleigh oscillator (phase).

Amplitude response curve

The two figures below display the amplitude and phase responses (blue) of the \(1^{\text{st}}\) harmonic of the Duffing oscillator as a function of the excitation amplitude.

Amplitude response curve - amplitude

Amplitude response curve of the Rayleigh oscillator (amplitude).

Amplitude response curve - phase

Amplitude-response curve of the Rayleigh oscillator (phase).