Notation and sign conventions#

Static analyses#

\(\boldsymbol{c}\) is the vector of the degrees of freedom of the model, the solution vectors of an.cs, and \(\lambda\) the load factor, the values of an.increments. The residual force vector of the non-linear analyses is

\[\boldsymbol{R}(\boldsymbol{c}, \lambda) = \boldsymbol{F}_{int}(\boldsymbol{c}) - \lambda \boldsymbol{F}_{ext}\]

with \(\boldsymbol{F}_{ext}\) = calc_fext(inc=1.) and \(\boldsymbol{F}_{int}\) = calc_fint(c), and the tangent stiffness matrix is

\[\boldsymbol{K}_T = \boldsymbol{K}_C + \boldsymbol{K}_G = \frac{\partial \boldsymbol{F}_{int}}{\partial \boldsymbol{c}} = \frac{\partial \boldsymbol{R}}{\partial \boldsymbol{c}}\]

with \(\boldsymbol{K}_C\) = calc_kC(c, NLgeom=True) and \(\boldsymbol{K}_G\) = calc_kG(c, NLgeom=True), such that the Newton-Raphson corrections solve \(\boldsymbol{K}_T \delta \boldsymbol{c} = -\boldsymbol{R}\), and \(\partial \boldsymbol{R}/\partial \lambda = -\boldsymbol{F}_{ext}\). A configuration-dependent load \(\boldsymbol{F}(\boldsymbol{c})\) has the load stiffness matrix \(-\partial \boldsymbol{F}/\partial \boldsymbol{c}\), which enters \(\boldsymbol{K}_T\), see callbacks. The linear static analysis solves \(\boldsymbol{K}_{C0} \boldsymbol{c} = \boldsymbol{F}_{ext}\), with \(\boldsymbol{K}_{C0}\) = calc_kC().

Eigenvalue analyses#

Analysis

Eigenvalue problem

Returned eigenvalues

lb()

\((\boldsymbol{K} + \lambda \boldsymbol{K}_G) \boldsymbol{u} = \boldsymbol{0}\)

load multipliers \(\lambda\), the positive ones first, in increasing order

freq()

\((\boldsymbol{K} + \lambda^2 \boldsymbol{M}) \boldsymbol{u} = \boldsymbol{0}\)

lambda2 \(= -\omega_n^2\), negative for a stable structure

For lb(), \(\boldsymbol{K}_G\) is the geometric stiffness matrix of the reference load, the critical load being \(\lambda_1\) times the reference load, and a negative load multiplier corresponds to the reversed reference load, see Linear buckling with a prestress. For freq(), \(\omega_n\) is in rad/s, see Frequency analysis; complex lambda2 appear beyond a flutter load, and a positive real lambda2 indicates divergence, see Follower loads and unsymmetric matrices. The eigenvectors are the columns of eigvecs, with the size of the model, see Boundary conditions and vector sizes.

Units#

structsolve has no units: the matrices and vectors of a model must use a consistent system of units, the eigenvalues of freq() are in rad2/s2 when the stiffness and the mass matrices are in consistent units of force, length and time, and the arc length of the arc-length methods is dimensionless, see arc_length._solver_arc_length(). absTOL is in the units of the forces of the model, relTOL is relative and, with the default Crisfield criterion, independent of the units of each degree of freedom, see Convergence and troubleshooting of non-linear analyses.

Log messages and silent#

The solvers print their progress to the standard output with the functions of logger, indented by level, the warnings starting with WARNING:. Every solver accepts silent, which suppresses the printing, e.g. an.static(NLgeom=True, silent=True) or lb(K, KG, silent=True). The callables of Analysis must accept the keyword argument silent too; the non-linear solvers call them with silent=True inside the iterations. The warnings of the eigenvalue solvers that require an action, such as the DenseFallbackWarning, are also issued with the warnings module, which silent does not suppress.