Example Problem 5 page 317 from Mark. E. Tuttle's "Structural Analysis of Polymeric Composite Materials", first edition.


In [2]:
import pyPLY

GraphiteEpoxy = pyPLY.CompositeMaterial()
GraphiteEpoxy.define("GraphiteEpoxy", "metric", E11=170e9, E22=10e9, G12=13e9, niu12=0.3, thk=0.125e-3,
             Sigma_ut0 = 1500e6, Sigma_uc0 = 1200e6, Sigma_ut90 = 50e6, Sigma_uc90 = 100e6, Tau_u = 75e6,
             alpha_11 = -0.9e-6, alpha_22 = 27.0e-6, beta_11 = 150e-6, beta_22 = 4800)

layer1 = pyPLY.Lamina()
layer2 = pyPLY.Lamina()
layer3 = pyPLY.Lamina()

layer1.define("Layer_1", 1, 30)
layer2.define("Layer_2", 1, 0)
layer3.define("Layer_3", 1, 90)

layer1.update()
layer2.update()
layer3.update()

laminate1 = pyPLY.Laminate()
laminate1.add_Lamina(layer1)
laminate1.add_Lamina(layer2)
laminate1.add_Lamina(layer3)

laminate1.update()

load1 = pyPLY.Loading()
load1.define_Load(50000,-10000,0,1,-1,0,0,0)
load1.apply_To(laminate1)



Results:


In [3]:
from pyPLYTools import LXMatrix
from IPython.display import Latex

Latex("$abd = " + LXMatrix(laminate1.abd, '.3e', ipython=True) + "$")


Out[3]:
$abd = \left[\begin{array}{cccccc} 3.757e-08 & -1.964e-09 & -1.038e-08 & 1.440e-04 & 3.905e-06 & 8.513e-05\\ -1.964e-09 & 1.037e-07 & -4.234e-08 & -1.866e-05 & -6.361e-04 & 4.628e-04\\ -1.038e-08 & -4.234e-08 & 2.004e-07 & 3.661e-04 & 3.251e-04 & -1.851e-05\\ 1.440e-04 & -1.866e-05 & 3.661e-04 & 7.064e+00 & -3.122e-02 & -4.572e+00\\ 3.905e-06 & -6.361e-04 & 3.251e-04 & -3.122e-02 & 6.429e+00 & -3.620e+00\\ 8.513e-05 & 4.628e-04 & -1.851e-05 & -4.572e+00 & -3.620e+00 & 1.741e+01 \end{array}\right]$

Midplane strains and curvatures:


In [8]:
Latex("$\epsilon_K = " + LXMatrix(load1.epsilon_K, '.3e', ipython=True) + "$")


Out[8]:
$\epsilon_K = \left[\begin{array}{c} 2.038e-03\\ -5.179e-04\\ -5.454e-05\\ 1.448e+01\\ 9.602e-02\\ -1.323e+00 \end{array}\right]$

Ply strains relative to the x-y coordinate system:

Note: In pyPLY applying a load to a laminate the return is a list of strains measured at the top, centroid and bottom of the each ply. For example to extract the bottom strains for the second ply one would do:


In [21]:
# 2 = plyno, 3x component per ply ("epsx", "epsy", "gammaxy"), 0 is the bottom component (1 is centroid, 2 is top component).
strainPly2 = load1.list_ply_strains_xy[2*3 + 0]
print strainPly2


[[ 0.00294326]
 [-0.00051186]
 [-0.00013723]]

In [13]:
print "     plyNo", "epsx", " epsy", " gammaxy"
for i in range (0, 3):
    strain = load1.list_ply_strains_xy[i*3 + 0]
    print "bottom  ", i+1, '{0:+.4}'.format(strain[0,0]), '{0:+.4}'.format(strain[1,0]), '{0:+.4}'.format(strain[2,0])
    strain = load1.list_ply_strains_xy[i*3 + 1]
    print "centroid", i+1, '{0:+.4}'.format(strain[0,0]), '{0:+.4}'.format(strain[1,0]), '{0:+.4}'.format(strain[2,0])
    strain = load1.list_ply_strains_xy[i*3 + 2]
    print "top     ", i+1, '{0:+.4}'.format(strain[0,0]), '{0:+.4}'.format(strain[1,0]), '{0:+.4}'.format(strain[2,0])


     plyNo epsx  epsy  gammaxy
bottom   1 -0.0006771 -0.0005359 +0.0001935
centroid 1 +0.000228 -0.0005299 +0.0001109
top      1 +0.001133 -0.0005239 +2.816e-05
bottom   2 +0.001133 -0.0005239 +2.816e-05
centroid 2 +0.002038 -0.0005179 -5.454e-05
top      2 +0.002943 -0.0005119 -0.0001372
bottom   3 +0.002943 -0.0005119 -0.0001372
centroid 3 +0.003848 -0.0005059 -0.0002199
top      3 +0.004753 -0.0004999 -0.0003026

Ply stresses relative to the x-y coordinate system:

Note: In the same manner, applying a load to a laminate the return has also a list of stresses measured at the top, centroid and bottom of the each ply. For example to extract the bottom stress for the second ply one would do:


In [19]:
# 2 = plyno, 3x component per ply ("sigmax", "sigmay", "tauxy"), 0 the bottom component.
stressPly2 = load1.list_ply_stresses_xy[2*3 + 0] 
print stressPly2


[[ 28045483.64349176]
 [-78602487.37103231]
 [ -1784008.53646703]]

In [14]:
print "     plyNo", "sigmax", "    sigmay", "    tauxy"
for i in range (0, 3):
    stress = load1.list_ply_stresses_xy[i*3 + 0]
    print "bottom  ", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])
    stress = load1.list_ply_stresses_xy[i*3 + 1]
    print "centroid", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])
    stress = load1.list_ply_stresses_xy[i*3 + 2]
    print "top     ", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])


     plyNo sigmax     sigmay     tauxy
bottom   1 -7.754e+07 -2.807e+07 -3.714e+07
centroid 1 +1.607e+07 -6.094e+06 +3.568e+06
top      1 +1.097e+08 +1.588e+07 +4.428e+07
bottom   2 +1.921e+08 -1.849e+06 +3.66e+05
centroid 2 +3.468e+08 +9.409e+05 -7.09e+05
top      2 +5.015e+08 +3.731e+06 -1.784e+06
bottom   3 +2.805e+07 -7.86e+07 -1.784e+06
centroid 3 +3.716e+07 -7.485e+07 -2.859e+06
top      3 +4.628e+07 -7.109e+07 -3.934e+06

In [ ]: