Plates and cylindrical shells#

A Shell is one rectangular domain of a plate, \(0 \le x \le a\), \(0 \le y \le b\), or of a cylindrical shell of radius \(r\), with \(y\) the arc length along the circumference. It holds the inputs of the model and calculates the structural matrices and force vectors, which are solved with structsolve. The same class is the building block of the assemblies MultiDomain and StiffPanelBay.

Inputs#

Geometry and model. The dimensions a, b and the radius r (None for a plate). The attribute model selects the kinematics and the non-linear equations, see panels.models; when it is not given, a plate gets 'plate_clpt_donnell' and a cylinder 'cylshell_clpt_sanders'; plates with large rotations, e.g. the domains of a wing box, need 'plate_clpt_gl', see Large rotations: plates with Green-Lagrange membrane strains, or 'plate_clpt_tl' when they also bend through large rotations, see Large rotations: total-Lagrangian Kirchhoff-Love plates, whose exact integration by default costs about twice that of 'plate_clpt_gl', and half with nx = gauss_points(m), ny = gauss_points(n), not exact but enough in practice. The models based on the classical laminated plate theory (CLPT) have the 3 degrees of freedom \(u, v, w\) per term, those based on the shear deformation theories (FSDT, TSDT) the 5 degrees of freedom \(u, v, w, \phi_x, \phi_y\).

Laminate. The stacking sequence stack, the ply thickness plyt and the lamina properties laminaprop, or one value per ply with plyts and laminaprops, the density rho (or rhos) and the offset of the laminate offset build the laminate Shell.lam with composites.laminated_plate(), whose constitutive matrix Shell.ABD enters every kernel. A stiffness that varies over the domain is given instead by ABDnxny, one matrix per integration point. The transverse shear stiffness of the FSDT is controlled by fsdt_shear_correction, and the TSDT with an offset is described in Third-order shear deformation theory with a laminate offset.

Approximation. The numbers of terms m and n of the approximation functions along \(x\) and \(y\), at most 30, see Bardell’s hierarchical functions, and the numbers of integration points nx and ny of the numerically integrated matrices, by default max(2*m - 1, 7) and max(2*n - 1, 7) for the current m and n, the smallest numbers that integrate exactly the products of up to four approximation functions, see gauss_points(). The boundary conditions are the flags of the edges, see Boundary conditions.

Loads. Point, line and pressure loads and the constant stress resultants of a prestress, see Loads.

The constructor sets the defaults, then the given attributes, and builds the laminate when a and b are given; the calculation methods rebuild the laminate and the size from the current attributes, see Shell.

Matrices and vectors#

The size of the matrices and vectors is that of the vector of the Ritz constants \(\boldsymbol{c}\), Shell.get_size():

quantity

method

used by

constitutive stiffness \(\boldsymbol{K}_C\)

Shell.calc_kC()

all analyses

geometric stiffness \(\boldsymbol{K}_G\)

Shell.calc_kG()

buckling, prestress

mass \(\boldsymbol{M}\)

Shell.calc_kM()

frequency, flutter

aerodynamic stiffness and damping

Shell.calc_kA(), Shell.calc_cA()

flutter

external force vector \(\boldsymbol{F}_{ext}\)

Shell.calc_fext()

static analyses

internal force vector \(\boldsymbol{F}_{int}\)

Shell.calc_fint()

non-linear analyses

tangent stiffness \(\boldsymbol{K}_T\)

Shell.calc_kT()

non-linear analyses

product \(\boldsymbol{K}_T \boldsymbol{v}\)

Shell.calc_kTv()

iterative solvers

load stiffness of follower pressures

Shell.calc_kCfollower()

follower loads

The linear matrices of a constant constitutive matrix over the whole domain are calculated in closed form; the others, and all of them when c, ABDnxny or a partial integration domain is given, are integrated numerically, see Bardell’s hierarchical functions. The non-linear quantities follow the Donnell or Sanders-Koiter kinematics of the model, with a tangent stiffness matrix that is the exact derivative of the internal force vector, see Tangent stiffness matrix and its product by a vector. The integration can be limited to a part of the domain with x1, x2, y1, y2, see Shell.integration_limits(), which is how the panels of a StiffPanelBay share one set of approximation functions.

Analyses#

The methods above have the signatures expected by the solvers of structsolve:

Results#

The fields at points or over a grid are calculated from the Ritz constants with Shell.uvw(), Shell.strain() and Shell.stress(), plotted with plot_shell(), and the shell with its results is saved with Shell.save(), see Field outputs, plots and files.