Choosing the transverse shear correction#

The FSDT gives transverse shear strains constant through the thickness, whereas equilibrium requires transverse shear stresses that vary through the thickness and vanish at the faces. The strain energy of the constant distribution is corrected by a transverse shear stiffness \(A_{ts}\) smaller than the constant-strain one, in the simplest case

\[A_{ts} = \kappa \bar{A}_{ts}, \qquad \bar{A}_{ts} = \sum_k \int_{z_k}^{z_{k+1}} C_s^{(k)} dz\]

with \(\kappa = 5/6\) for a homogeneous plate. For a laminate the correction depends on the stacking sequence and on the direction, and it is computed from the plies by Laminate.calc_transverse_shear_stiffness(), called by Laminate.calc_constitutive_matrix().

The corrected stiffness Ats#

A44, A45, A55, i.e. Laminate.Ats, always contain the shear correction, and they are the transverse shear stiffnesses to be used in an FSDT model as they are. The uncorrected Abar_ts is the one used in the TSDT, which needs no correction, see Laminate constitutive matrices per plate theory.

The method is chosen with the argument shear_correction of laminated_plate() and isotropic_plate(), or by changing the attribute shear_correction and calling Laminate.calc_transverse_shear_stiffness() again:

lam = laminated_plate(stack, plyt=plyt, laminaprop=laminaprop,
                      shear_correction='vlachoutsis')
lam.shear_correction = 'rohwer'
lam.calc_transverse_shear_stiffness()

Methods and their scope#

shear_correction

scope

homogeneous plate

'rohwer' (default)

any laminate, also unsymmetric, full 2x2 matrix including A45, from equilibrium [1]

5/6

'vlachoutsis'

scalar factor per direction [2], exact for specially orthotropic plies

5/6

'whitney'

unsymmetric orthotropic laminates [3], same result as 'vlachoutsis'

5/6

'chow'

symmetric laminates only [4]

5/6

'birman_bert'

equivalence of the average shear strain [5]

1

'thickness_shear'

first thickness-shear frequency [6], positive ply densities required

\(\pi^2/12\)

'constant'

\(\kappa = 5/6\) for any laminate

5/6

None

no correction, Ats = Abar_ts

1

The scalar methods apply their factors as A55 = k13*Abar55, A44 = k23*Abar44 and A45 = (k13 + k23)/2*Abar45, which gives A45 = 0 whenever Abar45 = 0, e.g. for every balanced laminate, see Laminate.make_balanced(), whereas 'rohwer' captures the coupling of the bending-twisting terms D16, D26. The details of each method are in Laminate.calc_transverse_shear_stiffness().

The result of 'rohwer' is tied to the laminate axes \(x\), \(y\), i.e. it is not invariant to a rotation of the axes. When a laminate is used with its material direction rotated with respect to the axes of a model, a new Laminate with the ply angles shifted by the rotation gives the transverse shear stiffness in the axes of the model, instead of a tensor rotation of Ats.

scf_k13 and scf_k23#

The attributes scf_k13 = A55/Abar55 and scf_k23 = A44/Abar44 are informative only: the correction is already inside Ats, and they must not be applied to it again. They are useful to compare the methods, or to report the equivalent scalar factors of 'rohwer'.

Using another correction factor#

A model that requires its own shear correction factors, e.g. from a reference solution, applies them to the uncorrected matrix:

k13, k23 = 0.8, 0.75
Ats_user = np.array([[k23*lam.Abar44, (k13 + k23)/2*lam.Abar45],
                     [(k13 + k23)/2*lam.Abar45, k13*lam.Abar55]])

or k*lam.Abar_ts with a single factor. With shear_correction=None, Ats is equal to Abar_ts.

Problem-dependent factors#

The methods above assume static states of the laminate alone, e.g. the cylindrical bending states of 'rohwer'. From the strain gradients of an actual FSDT solution, Laminate.calc_equilibrium_transverse_shear() recovers the transverse shear stresses by integrating the equilibrium equations through the thickness, and Laminate.calc_aposteriori_energy() gives their strain energies, which lead to a posteriori factors in the sense of Noor and Peters [7]. See Transverse shear stresses.

References#