Calculation

Once all the elements, supports and loads are in place, solving the calculation is as easy as calling the solve method.

SystemElements.solve(force_linear=False, verbosity=0, max_iter=200, geometrical_non_linear=False, **kwargs)[source]

Compute the results of current model.

Return type:

ndarray

Args:
force_linear (bool, optional): Force a linear calculation, even when the system has non-linear nodes.

Defaults to False.

verbosity (int, optional): Log calculation outputs (0), or silence (1). Defaults to 0. max_iter (int, optional): Maximum allowed iterations. Defaults to 200. geometrical_non_linear (int, optional): Calculate second order effects and determine the buckling factor.

Defaults to False.

Optional Keyword Args:

naked (bool): Whether or not to run the solve function without doing post processing. discretize_kwargs (dict): When doing a geometric non linear analysis you can reduce or

increase the number of elements created that are used for determining the buckling_factor

Raises:
FEMException: The eigenvalues of the stiffness matrix are non zero, which indicates an unstable structure.

Check your support conditions

Returns:

np.ndarray: Displacements vector.

Non linear

The model will automatically do a non linear calculation if there are non linear nodes present in the SystemElements state. You can however force the model to do a linear calculation with the force_linear parameter.

Geometrical non linear

To start a geometrical non linear calculation you’ll need to set the geometrical_non_linear to True. It is also wise to pass a discretize_kwargs dictionary.

ss.solve(geometrical_non_linear=True, discretize_kwargs=dict(n=20))

With this dictionary you can set the amount of discretization elements generated during the geometrical non linear calculation. This calculation is an approximation and gets more accurate with more discretization elements.