AsymptoticStability

class sharpy.postproc.asymptoticstability.AsymptoticStability[source]

Calculates the asymptotic stability properties of the linearised aeroelastic system by computing the corresponding eigenvalues.

To use an iterative eigenvalue solver, the setting iterative_eigvals should be set to on. This will be beneficial when deailing with very large systems. However, the direct method is preferred and more efficient when the system is of a relatively small size (typically around 5000 states).

Warning

The setting modes_to_plot to plot the eigenvectors in Paraview is currently under development.

The settings that this solver accepts are given by a dictionary, with the following key-value pairs:

Name

Type

Description

Default

print_info

bool

Print information and table of eigenvalues

False

reference_velocity

float

Reference velocity at which to compute eigenvalues for scaled systems

1.0

frequency_cutoff

float

Truncate higher frequency modes. If zero none are truncated

0

export_eigenvalues

bool

Save eigenvalues and eigenvectors to file.

False

display_root_locus

bool

Show plot with eigenvalues on Argand diagram

False

velocity_analysis

list(float)

List containing min, max and number of velocities to analyse the system

[]

iterative_eigvals

bool

Calculate the first num_evals using an iterative solver.

False

num_evals

int

Number of eigenvalues to retain.

200

modes_to_plot

list(int)

List of mode numbers to simulate and plot

[]

postprocessors

list(str)

To be used with modes_to_plot. Under development.

[]

postprocessors_settings

dict

To be used with modes_to_plot. Under development.

{}

display_root_locus()[source]

Displays root locus diagrams.

Returns the fig and ax handles for further editing.

Returns

ax:

Return type

fig

export_eigenvalues(num_evals)[source]

Saves a num_evals number of eigenvalues and eigenvectors to file. The files are saved in the output directoy and include:

  • eigenvectors.dat: (num_dof, num_evals) array of eigenvectors

  • eigenvalues_r.dat: (num_evals, 1) array of the real part of the eigenvalues

  • eigenvalues_i.dat: (num_evals, 1) array of the imaginary part of the eigenvalues.

The units of the eigenvalues are rad/s

References

Loading and saving complex arrays: https://stackoverflow.com/questions/6494102/how-to-save-and-load-an-array-of-complex-numbers-using-numpy-savetxt/6522396

Parameters

num_evals – Number of eigenvalues to save

mode_time_domain(fact, fact_rbm, mode_num, cycles=2)[source]

Returns a single, scaled mode shape in time domain.

Parameters
  • fact – Structural deformation scaling

  • fact_rbm – Rigid body motion scaling

  • mode_num – Number of mode to plot

  • cycles – Number of periods/cycles to plot

Returns

Time domain array and scaled eigenvector in time.

Return type

tuple

plot_modes()[source]

Warning

Under development

Plot the aeroelastic mode shapes for the first n_modes_to_plot

print_eigenvalues()[source]

Prints the eigenvalues to a table with the corresponding natural frequency, period and damping ratios

run(online=False)[source]

Computes the eigenvalues and eigenvectors

Returns

Eigenvalues sorted and frequency truncated eigenvectors (np.ndarray): Corresponding mode shapes

Return type

eigenvalues (np.ndarray)

static sort_eigenvalues(eigenvalues, eigenvectors, frequency_cutoff=0)[source]

Sort continuous-time eigenvalues by order of magnitude.

The conjugate of complex eigenvalues is removed, then if specified, high frequency modes are truncated. Finally, the eigenvalues are sorted by largest to smallest real part.

Parameters
  • eigenvalues (np.ndarray) – Continuous-time eigenvalues

  • eigenvectors (np.ndarray) – Corresponding right eigenvectors

  • frequency_cutoff (float) – Cutoff frequency for truncation [rad/s]

Returns: