Skip to content

Laminate

A Laminate stacks plane-stress layers into a section for a Shell. It takes the place of the material there, and the shell integrates the layers through the thickness during the analysis rather than reducing them to ABD matrices, so a layer may be nonlinear or carry internal state:

import torch
from torchfem import Laminate, Shell
from torchfem.materials import OrthotropicElasticityPlaneStress

gfrp = OrthotropicElasticityPlaneStress(
    E_1=54000.0, E_2=9400.0, nu_12=0.33, G_12=5500.0, G_13=5500.0, G_23=3000.0
)

layup = Laminate(
    materials=[gfrp] * 4,
    thicknesses=[0.25] * 4,
    angles=[0.0, torch.pi / 2, torch.pi / 2, 0.0],
)

model = Shell(nodes, elements, layup)

Layers are given from the bottom surface upwards. symmetric mirrors the half-stack about the mid-plane, and offset moves the reference surface the shell nodes sit on:

Stacking sequences of three laminates Stacking sequences of three laminates

A stacking sequence of plane-stress layers for shell elements.

Parameters:

  • materials (Sequence[MechanicsMaterial]) –

    Plane-stress mechanics materials, one per layer.

  • thicknesses (Sequence[float] | Sequence[Tensor] | Tensor) –

    Per-layer thicknesses. Each entry may be a scalar (constant over the mesh) or a tensor of shape (n_elem,).

  • angles (Sequence[float] | Sequence[Tensor] | Tensor) –

    Per-layer orientation angles in radians, measured from the element's first local axis. Each entry may be a scalar or a tensor of shape (n_elem,).

  • n_simpson (int, default: 3 ) –

    Number of Simpson integration points used per layer through the thickness. Must be an odd integer (default 3).

  • symmetric (bool, default: False ) –

    If True, the given layers are the half-stack (outer surface to mid-plane) and are mirrored to form the full laminate.

Notes
  • Layers may carry internal state (e.g. an elastoplastic metal ply); the state width is the per-layer maximum. Stations are integrated during the analysis, so nonlinear, state-bearing layers need no ABD matrices.
  • The laminate behaves like a Material (is_vectorized, vectorize, n_state), so it can be passed straight to Shell.
  • The stack is centered on its mid-plane. Shell(offset=...) moves the reference surface, adding the membrane-bending coupling it implies.

__init__(materials, thicknesses, angles, n_simpson=3, symmetric=False)

vectorize(n_elem, offset)

Return a vectorized copy for n_elem elements.

Each layer material is vectorized and rotated into the element frame, and the stations, transverse shear stiffness, and mass integrals are precomputed about the reference surface given by offset.

plot(ax=None)

Illustrate the stacking sequence.

Each ply is drawn as a band through the thickness (height proportional to the ply thickness) with the ply angle annotated.

Parameters:

  • ax

    Existing matplotlib axes to plot into.