Static Analysis#

class xara.StaticAnalysis(model, control=None, *, system=None, test=None, hooks=None, constraints=None, algorithm=None, recover_algorithms=None, ctrl_incr=None, ctrl_iter=None, numberer=None, integrator=None)#

Perform a static analysis on the model.

Parameters:
model: xara.Model

The structural model to analyze.

control: xara.LoadFactorControl, optional

If None, defaults to (“Proportional”, 1.0).

system: str, optional

The type of matrix storage to use for inverting the system stiffness. If None, defaults to "BandGeneral". For options, see system.

test: tuple, optional

A tuple specifying the convergence test type and its parameters.

constraints: str, optional

The type of constraint handler to use. If None, defaults to "Plain".

numberer: str, optional

The type of numberer to use. If None, defaults to "RCM".

analyze(steps: int = 1, action=None)#

Perform a sequence of static analysis steps on the model. Each step increments

Parameters:
steps: int, optional

The number of analysis steps to perform. Default is 1.

Returns:

0 if the analysis completed successfully, otherwise raises a RuntimeError.

Return type:

int

Raises:

RuntimeError – If the analysis did not complete successfully, an error message is raised with details from the model’s error output.

Examples#

Theory#

Governing Equations#

In static nonlinear finite element problems we seek a solution (\(\boldsymbol{u}\), \(\lambda\)) to the nonlinear equation

\[\boldsymbol{r}(\boldsymbol{u}, \lambda) = \boldsymbol{0} \qquad\text{with}\qquad \boldsymbol{r}(\boldsymbol{u}, \lambda) \triangleq \lambda \boldsymbol{p}_f - \boldsymbol{p}_r(\boldsymbol{u})\]

where \(\boldsymbol{r}\) is known as the residual and represents the equilibrium imbalance of a give trial state \(\boldsymbol{u}\). In an incremental analysis, solutions to this equation are sought at successive incremental steps:

\[\boldsymbol{r}(\boldsymbol{u}_{n}, \lambda_n) = \lambda_n \boldsymbol{p}_f - \boldsymbol{p}_{\sigma}(\boldsymbol{u}_{n})\]

The solution to this equation is typically obtained using an iterative procedure, in which a sequence of approximations (\(\boldsymbol{u}_{n}^{(i)}\), \(\lambda_n^{(i)}\)), \(i=1,2, ..\) is obtained which converges to the solution (\(\boldsymbol{u}_n\), \(\lambda_n)\). The most frequently used iterative schemes, such as Newton-Raphson, modified Newton, and quasi Newton schemes, are based on the linearization of the residual \(\boldsymbol{r}\) about a state (\(\boldsymbol{u}_{n}\), \(\lambda_n\)):

\[\begin{split}\mathcal{L} \boldsymbol{r}(\boldsymbol{u}, \lambda)(\boldsymbol{u}_{n},\lambda_n) = \lambda_n^{(i)} \boldsymbol{p}_f - \boldsymbol{p}_{\sigma}\left(\boldsymbol{u}_{n}^{(i)} \right) - \left[ \begin{array}{cc} \boldsymbol{K}_n^{(i)} & -\boldsymbol{p}_f \\ \end{array} \right] \left( \begin{array}{c} \boldsymbol{u}_{n} - \boldsymbol{u}_{n}^{(i)} \\ \lambda_n - \lambda_n^{(i)} \end{array} \right)\end{split}\]

which a system of of \(N\) equations with (\(N+1\)) unknowns. Two solve this, an additional equation is required, the constraint equation. The constraint equation used depends on the static integration scheme, of which there are a number, for example load control, arc length, and displacement control.

Pseudo-Time#