Shell elements

A shell element is used to model the response of structural elements that are much thinner along one direction (out-of-plane direction) compared to the two in-plane directions. A 4-node shell element is implemented in MOOSE based on Dvorkin and Bathe (1984) that can model structural response of both thin and thick plates.

Figure 1: Shell element with 4 nodes and 3 translational and 2 rotational degrees of freedom at each node.

Each of the four nodes have 5 degrees of freedom - 3 displacements (u1ku_1^k,u2ku_2^k, u3ku_3^k) and 2 rotations (αk\alpha_k and βk\beta_k). The thickness (aka_k) is assumed to be constant across the shell element and the initial normal (oVnk^oV_n^k) at all nodes are same as the normal to the shell element, which is automatically computed using the coordinates of the nodes.

The basic equation of equilibrium for a quasi-static shell is the same as that of a continuum brick element:

σ=Fext\nabla \cdot \sigma = F_{ext}

The quasi-static shell element implementation is MOOSE is spread across four different objects: strain computation (ADComputeIncrementalShellStrain & ADComputeFiniteShellStrain), elasticity tensor computation (ADComputeIsotropicElasticityTensorShell), stress computation (ADComputeShellStress) and stress divergence kernel (ADStressDivergenceShell).

Strain Calculation

The first step to calculating stresses is to calculate the strains in the shell element. All the computations are performed in the natural coordinate system of the shell (r1r_1, r2r_2 and r3r_3). The geometry of the element at any time t is defined as:

txi=k=14hktxik+r32k=14akhktVnik^t x_i = \sum_{k=1}^4 h_k ^t {x_i}^k + \frac{r_3}{2} \sum_{k=1}^4 a_k h_k ^tV_{ni}^k

Therefore, the incremental displacements of any point within the shell element with natural coordinate rir_i at time tt in the global cartesian coordinate system (ox1^ox_1, ox2^ox_2 and ox3^ox_3) are:

ui=k=14hkuik+r32k=14akhk(tV2ikαk+tV1ikβk)u_i = \sum_{k=1}^4 h_k u_i^k + \frac{r_3}{2} \sum_{k=1}^4 a_k h_k (-^tV_{2i}^k \alpha_k + ^tV_{1i}^k \beta_k)

If tgi=tx/ri^t \mathbf{g_i} = \partial ^t \mathbf{x}/\partial r_i are the covariant base vectors, then the Green-Lagrange strain components can be written as:

ϵ~ij=12(tgitgj0gi0gj)\tilde{\epsilon}_{ij} = \frac{1}{2}(^t \mathbf{g_i} \cdot ^t \mathbf{g_j} - ^0 \mathbf{g_i} \cdot ^0 \mathbf{g_j})

The expressions for the small and large strains in the 11, 22, 12, 13 and 23 directions are provided in equations 21 to 24 of Dvorkin and Bathe (1984). The expressions for the shear strains in the 13 and 23 directions also include a correction for shear locking. In MOOSE the small strain increments are computed in ADComputeIncrementalShellStrain and the small + large strain increments are computed in ADComputeFiniteShellStrain). Note that strain in the 33 direction is not computed.

Apart from the strain increment, two other matrices (B and BNL) are computed by the strain class. These two matrices connect the nodal displacements/rotations to the small and large strains, respectively, i.e., e=Bue=B u and η=BNLu\eta = B_{NL} u. These two matrices are then used to compute the residuals in ADStressDivergenceShell.

Elasticity tensor

The shell element assumes a plane stress condition, i.e., the normal stress in the 33 direction should be zero. To enable the plane stress condition, an edited constitutive tensor is created in the local cartesian coordinate system (C^mnop\hat{C}_{mnop}). This local constitutive tensor is then transformed into contravariant constitutive tensor using:

C~ijkl=(gie^m)(gje^n)(gke^o)(gle^p)C^mnop\tilde{C}_{ijkl} = (g^i \cdot \hat{e}_m)(g^j \cdot \hat{e}_n)(g^k \cdot \hat{e}_o)(g^l \cdot \hat{e}_p) \hat{C}_{mnop}

where gig^i are the contravariant base vectors. The contravariant base vectors g1g^1, g2g^2 and g3g^3 are determined from the covariant base vectors g1g_1, g2g_2 and g3g_3 using the following equations: g1=g2×g3g1(g2×g3)g^1=\dfrac{g_2 \times g_3}{g_1 \cdot (g_2 \times g_3)}

g2=g3×g1g1(g2×g3)g^2=\dfrac{g_3 \times g_1}{g_1 \cdot (g_2 \times g_3)}

g3=g1×g2g1(g2×g3)g^3=\dfrac{g_1 \times g_2}{g_1 \cdot (g_2 \times g_3)} These contravariant base vectors satisfy the orthogonality condition: gigj=δijg^i \cdot g_j =\delta_{ij}, where δij\delta_{ij} is Kronecker delta. The e^i\hat{e}_i vectors are the local cartesian coordinate system computed using the covariant base vectors, i.e.,

e^3=g3g3;e^1=g2×e^3g2×e^3;e^2=e^3×e^1\hat{e}_3 = \frac{g_3}{|g_3|}; \hat{e}_1 = \frac{g_2 \times \hat{e}^3}{|g_2 \times \hat{e}^3|}; \hat{e}_2 = \hat{e}_3 \times \hat{e}_1

The elasticity tensor at each quadrature point (qp) is computed in ADComputeIsotropicElasticityTensorShell.

Stress calculation

The stress tensor at each qp is computed as:

τ~ij=C~ijklϵ~kl\tilde{\tau}^{ij} = \tilde{C}^{ijkl} \tilde{\epsilon}_{kl}

The total stress at each qp is computed in ADComputeShellStress.

Stress divergence

Finally the residuals are computed and assembled in ADStressDivergenceShell for both small and large strain scenarios. For small strain scenarios, the residual at each qp is computed by multiplying the stress tensor at that qp with the corresponding components of the B matrix. Additionally, for large strain scenarios, the old stress tensor is multiplied with corresponding components of the BNLB_{NL} matrix and that is also added to the residual at each qp. These two components for the residual are same as KLuK_{L} u and KNLuK_{NL} u in equation 25 of Dvorkin and Bathe (1984).

Note that there are quadrature points both along the plane as well as along the thickness of the element. The order of Gauss quadrature rule along the thickness is provided as input by the user to all the above mentioned objects.

Inertia

This element's generalized inertia forces are obtained directly from the kinematic of the shell by computing the inertial forces component-wise. Inertia forces can be expressed in terms of a mass matrix as described in Bolourchi (1979). The mass matrix takes the following form of a volume integral:

M=VρHTHdV\mathbf{M} = \int_{V}^{} \rho \mathbf{H}^{T} \mathbf{H} dV

where H\mathbf{H} is an element-wise matrix that contains the interpolation functions for displacement and rotational degrees of freedom. In the implementation, the volume integral is simplified, and it is assumed that the element thickness is constant. Similarly, one orientation matrix is used per element, that is, changes in orientation in a single element's geometry are neglected.

References

  1. Saïd Bolourchi. On finite element nonlinear analysis of general shell structures. PhD thesis, Massachusetts Institute of Technology, 08 1979.[BibTeX]
  2. E Dvorkin and K Bathe. A continuum mechanics based four-node shell element for general non-linear analysis. Engineering Computations, 1(1):77–88, 1984.[BibTeX]