G+Smo  23.12.0
Geometry + Simulation Modules
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Tutorial: Non-Linear Kirchhoff-Love shell analysis

This example solves a non-linear shell problem using the gsThinShellAssembler. The goals of the tutorial are the following:

  • Solve a geometrically non-linear problem and export the solutions

For detailed information about the construction of gsThinShellAssembler and gsMaterialMatrixBase, please consult the tutorial Tutorial: Linear Kirchhoff-Love shell analysis.

For the non-linear problem, we consider the paraboloid geometry, stored in the file below. Like for the Tutorial: Linear Kirchhoff-Love shell analysis, the geometry is loaded using gsReadFile.

The geometry and basis refinement are the same as for Tutorial: Linear Kirchhoff-Love shell analysis.

For this problem, we fix all four corners of the paraboloid, hence the boundary conditions are defined as:

In addition, a point load is applied using the gsPointLoads class. This point load is defined using a parametric point, and a load in the physical space:

The configuration of the material matrix and the shell assembler is the same as in Tutorial: Linear Kirchhoff-Love shell analysis. The only differences are that we now use a Neo-Hookean material (by passing another value to "Material"):

And that the point loads need to be registered in the assembler, i.e.

For the non-linear problem, we need the tangential stiffness matrix (i.e. the Jacobian) and the residual vector. Both operators depend on the deformed configuration, through the solution vector. A convenient way of defining these operators is through an std::function, as is also done in the Structural Analysis Module module:

Inside the functions, it can be seen that the assembler first constructs a multi-patch object of the deformed configuration, based on the solution vector, and then it assembles the Jacobian and the residual vector by passing the deformation. The resulting operators are given as arguments, and the functions return true if the assembly is succesful.

In principle, the gsThinShellAssembler always takes the geometric non-linearity into account when assembled with a deformed object as input. The same holds for the material non-linearity, since they are evaluated on the current deformation.

To initialize the non-linear solve, a linear solve is performed first:

Afterwards, Newton-Raphson iterations are performed. The functions Residual and Jacobian are called inside GISMO_ENSURE macros, guarding succesful assembly. The iterative update is performed on the solution vector, which is converted inside the Jacobian and Residual to a multi-patch.

Finally, exporting of the solution is similar to Tutorial: Linear Kirchhoff-Love shell analysis.

Annotated source file

Here is the full file nonlinear_shell.cpp. Clicking on a function or class name will lead you to its reference documentation.