***eigen#

Description#

The procedure ***eigen allows to specify the modes and resonant frequencies to extract in eigen-value problems.

The eigen frequencies are normalized in the following manner:

(60)#\[Max(\text{over the nodes})(\sqrt{~U_1^2~+~U_2^2~+~U_3^2}) = 1\]

And the associated energy for a frequency is calculated as:

(61)#\[E = \frac{1}{2} U.K.U \qquad \text{with $U$ normalized as given above}\]

The frequency values are stored with their associated energies in an ASCII text file named problem.eigen_info.

There are currently multiple methods implemented to extract eigen values: spectra, lanczos and inverse_vector_iteration (this is the default method). spectra is the most robust and the only method that allows to compute free modes (no kinematic constraints on the structure), or semi-free modes (some rigid body modes are still possible). If needed, it is also the only one that can compute negative eigen values.

The syntax is presented for each method separately below (the spectra solver is further detailed in the devel manual).

Syntax#

***eigen spectra \(~\,\) [ *type type ] \(~\,\) [ *nb_modes nb_modes ] \(~\,\) [ *nb_sub nb_sub ] \(~\,\) [ *tol tol ] \(~\,\) [ *output_eigen_not_freq ] \(~\,\) [ *clean_rbm ] \(~\,\) [ *output_rbm ] \(~\,\) [ **use_lumped_mass ]

*type

is the type of eigen problem to solve. It can be either basic or generalized. The latter is the default option and solve the generalized eigen problem \(K.U =\lambda M.U\) (smallest eigenvalues). basic can be used to compute solutions of \(K.U =\lambda U\).

*nb_modes

is the number of eigen values (and eigen modes) to compute. Default is \(10\).

*nb_sub

is the size of the Krylov subspace for the eigen value extraction algorithm. Default is \(4\)nb_modes (which is relatively high for accuracy, \(2\)nb_modes\(+1\) may be enough if nb_modes is sufficiently large for the system).

*tol

is the precision parameter for the calculated eigenvalues.

*output_eigen_not_freq

indicates that output must be given in terms of eigen values \(\lambda_i\), not in terms of eigen frequencies \(f_i\), with \(f_i=\frac{\sqrt{\lambda_i}}{2\pi}\).

*clean_rbm

indicates that rigid body modes are to be computed (based on geometry only) and removed for the evaluation of the Krylov subspace. This option cannot be used if the mass matrix is lumped, and is generally unecessary when tpye is basic.

*output_rbm

indicates that if rigid body modes are computed, they must be output as eigen modes with vanishing eigen value and energy. Only works with the previous options.

**use_lumped_mass

is not specific to spectra, but must necessarily come after the spectra options (any other two stars options for ***eigen as well).

Example#

(Full tests are available in External/Spectra/Test/ and are available on request for any user).

Compute the \(10\) smallest eigen values (outputs eigen frequencies) of the generalized eigen value problem.

***eigen spectra

Compute the \(25\) smallest eigen values of the basic problem (subspace size is \(100\)).

***eigen spectra
  *type basic
  *nb_modes 25
  *output_eigen_not_freq

Compute the \(10\) smallest eigen values (outputs eigen frequencies) of the generalized eigen value problem using a lumped mass matrix.

***eigen spectra
  *type generalized
 **use_lumped_mass

Compute the \(40\) smallest eigen values (outputs eigen frequencies) of the generalized eigen value problem using a lumped mass matrix with a subspace of size \(100\). Also computes rigid body modes and removes them from the analysis but outputs them in the results files.

***eigen spectra
  *type generalized
  *nb_modes 40
  *nb_sub   100
  *clean_rbm
  *output_rbm

Syntax#

***eigen lanczos \(~\,~\,~\,\) nb_freq  freq_max  nb_iter  nb_sub

nb_freq

is the number of eigen frequencies to find.

freq_max

is the maximum value of the frequencies to search for.

nb_iter

number of iteration for the eigen value search by QR decomposition. Default is \(8\).

nb_sub

size of the Krylov subspace. Default is \(2\)nb_freq if nb_freq\(<8\), else it is \(2\)nb_freq\(+8\).

Example#

For this example the calculation will search for 8 frequencies and then stop. The calculation will stop also if the last frequency extracted is greater than 10000 (freq_max).

***eigen lanczos
   8 10000.

Syntax#

***eigen inverse_vector_iteration \(~\,~\,~\,\) nb_freq  d_freq  freq_max

nb_freq

is the number of eigen frequencies to find.

d_freq

is the search interval for the resonant frequencies. If several frequencies are located in an interval smaller than d_freq the calculation may fail to find all the frequencies. lanczos method does not need this parameter.

freq_max

is the maximum value of the frequencies to search for.

Example#

For this example the calculation will search for 8 frequencies and then stop. The calculation will stop also if the last frequency extracted is greater than 10000 (freq_max).

***eigen
   8 100. 10000.

The extraction of the resonant modes is made with the method of inverse powers and with a shifting of frequencies. After having obtained a frequency \(f\), the next frequency is searched about \(f + \Delta f\) where \(\Delta f\) is given by the parameter d_freq. The choice of this frequency is therefore very important.

  • If d_freq is small the calculation may fall back on a frequency already calculated. In this case the search will be shifted to \(f + 2\Delta f\) and so on until a new frequency is found. This succession of searches will inevitably add to the cost of the calculation.

  • If d_freq is large the search process risks to omit intermediate resonant frequencies.

  • Lastly if it is desired to have the first resonant frequency it will be necessary to give a small value for the parameter d_freq. If the value is small enough the calculation will be sure to not skip the first frequency. Searches for subsequent frequencies will then be very slow however.