New 2021 additions to OpenSees
2021 has almost gone, I haven't written on my blog almost all year, but there has been progress! I've made a bunch of small contributions this year to OpenSees (see all contributions here) but two big ones: a new material model for high-cyclic analysis of sands (SANISAND-MS with my collaborators at TU Delft, NGI and Bristol, see here) and added isogeometric analysis (IGA) of shells capabilities. This last contribution is very recent and is still (as of writing this) in pull request mode. I'll let some time pass, for possible review, before I definitely merge into main OpenSees.
Briefly, IGA uses NURBS as a functional basis instead of regular polynomials. NURBS is a well developed CAD technology that allows very smooth modeling of lines, surfaces and volumes. Because in continuum mechanics we use lots of derivatives of the main solution field (strains, stresses come from derivatives of the displacement field) this smoothness is an advantage over regular FEM in that you can ensure inter-element continuity of these fields. This, in turn, produces some nice convergence properties.
In the figure above, we can see that IGA allows for large deformation modeling. Shown is the "pinched cylinder" benchmark case. You can see we replicate a reference solution with accuracy.
Anyway, like any new technology there are trade-offs to keep in mind. In IGA there are two nice features of FEM which are lost: first, the concept of element and, second, the interpolatory property for nodal values.
In the first issue, the higher continuity attained by the NURBS basis is obtained by "overlaping" elements for continuity order 2 and above. Thus, in IGA one is more preoccupied with "patches" of elements, which for all intents and purposes can be thought of as a regular finite element with a variable (large) number of nodes which is mapped onto a rectangular parent domain.
Regarding the second issue, lets use a picture
Shown is a standard cantilever beam modeled as a single "patch" of IGA "elements", with a tip load and solved using the new OpenSees capabilities (see script here). Depending on the order of continuity you can have 2 elements (order 2) or 1 element (order 3) in the longitudinal direction, whereas order is 1 in the transverse direction. You can see the control points (terminology for nodes in IGA) do not belong to the surface, except at the edges of the patch. Depending on specific details, not even the patch edges are generally included in the surface. The DOFs at the control points are the displacements of the control points, which uniquely describe the shape of the surface. The other thing to note is that two rows of control points are fixed. This is to enforce the no-rotation (clamped) boundary condition at the left edge. The shell formulation used is a Kirchoff-Love formulation which only has displacements at the control points as DOFS (no rotations). This can take a bit getting used to if you do classical shell analysis where elements have 6 DOFS (3 displacements and 3 rotations) at each node. Oh, by the way, that is not an amplified deformed shape, e.g. those are real displacements...
Another annoying thing about IGA is that if you want to do anything more complex (or you want a better mesh) you'll need several patches. If the edge nodes are interpolatory (as is assumed in the OpenSees implementation for shells), then only C0 continuity is available across patches, which means you have to do some tricks to guarantee bending stiffness across patch boundaries. More on this in a future video I hope.
For now, I'll wrap up with more pics of large deformation, highly-nonlinear, snappy-throughy analysis cases whet your appetite for IGA. All can be found in the examples repo (here) if you're patient.