Progressive Failure Example Calculation

From "SE253B Progressive Failure Example Calculation" by H.Kim UCSD SE253
http://csrl.ucsd.edu/courses/SE253B/files/lectures/04_ProgressiveFailureExampleCalculations.pdf


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

CarbonEpoxy = pyPLY.CompositeMaterial()
CarbonEpoxy.define("CarbonEpoxy", "psi", E11=20e6, E22=1.5e6, G12=1e6, niu12=0.29, thk=0.005,
             Sigma_ut0 = 310e3, Sigma_uc0 = 310e3, Sigma_ut90 = 6e3, Sigma_uc90 = 30e3, Tau_u = 15e3)

layer1 = pyPLY.Lamina()
layer2 = pyPLY.Lamina()
layer3 = pyPLY.Lamina()
layer4 = pyPLY.Lamina()
layer5 = pyPLY.Lamina()
layer6 = pyPLY.Lamina()
layer7 = pyPLY.Lamina()
layer8 = pyPLY.Lamina()

layer1.define("Layer_1", 1, 45)
layer2.define("Layer_2", 1, -45)
layer3.define("Layer_3", 1, 90)
layer4.define("Layer_4", 1, 0)
layer5.define("Layer_5", 1, 0)
layer6.define("Layer_6", 1, 90)
layer7.define("Layer_7", 1, -45)
layer8.define("Layer_8", 1, 45)

layer1.update()
layer2.update()
layer3.update()
layer4.update()
layer5.update()
layer6.update()
layer7.update()
layer8.update()

laminate1 = pyPLY.Laminate()
laminate1.add_Lamina(layer1)
laminate1.add_Lamina(layer2)
laminate1.add_Lamina(layer3)
laminate1.add_Lamina(layer4)
laminate1.add_Lamina(layer5)
laminate1.add_Lamina(layer6)
laminate1.add_Lamina(layer7)
laminate1.add_Lamina(layer8)

laminate1.update()

The [A] matrix of the intact laminate is:


In [2]:
Latex("$A = " + LXMatrix(laminate1.A, '.3e', ipython=True) + " lb/in$")


Out[2]:
$A = \left[\begin{array}{ccc} 3.489e+05 & 1.013e+05 & -1.819e-11\\ 1.013e+05 & 3.489e+05 & -3.638e-12\\ -1.819e-11 & -3.638e-12 & 1.238e+05 \end{array}\right] lb/in$

In step 1 a loading in x-direction is applyed: $N_x = 1917.0 lb/in$.


In [3]:
load1 = pyPLY.Loading()
criterion1 = pyPLY.PlyFailure()

load1.define_Load(1917,0,0,0,0,0,0,0)
load1.apply_To(laminate1)

Ply stresses:

Note: only half of laminate is reported on.

In [4]:
print "     layerNo", "sigma11", "      sigma22", "    tau12"
for i in range (0, 4):
    stress = load1.list_ply_stresses_12[i*3 + 0]
    print "bottom  ", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4e}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])
    stress = load1.list_ply_stresses_12[i*3 + 1]
    print "centroid", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4e}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])
    stress = load1.list_ply_stresses_12[i*3 + 2]
    print "top     ", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4e}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])


     layerNo sigma11       sigma22     tau12
bottom   1 +4.378e+04 +4.1455e+03 -7742.0
centroid 1 +4.378e+04 +4.1455e+03 -7742.0
top      1 +4.378e+04 +4.1455e+03 -7742.0
bottom   2 +4.378e+04 +4.1455e+03 +7742.0
centroid 2 +4.378e+04 +4.1455e+03 +7742.0
top      2 +4.378e+04 +4.1455e+03 +7742.0
bottom   3 -3.244e+04 +8.2943e+03 -1.433e-12
centroid 3 -3.244e+04 +8.2943e+03 -1.519e-12
top      3 -3.244e+04 +8.2943e+03 -1.606e-12
bottom   4 +1.2e+05 -3.2974e+00 +6.576e-13
centroid 4 +1.2e+05 -3.2974e+00 +7.44e-13
top      4 +1.2e+05 -3.2974e+00 +8.303e-13

Ply strains:


In [5]:
print "     layerNo", "eps11", "      eps22", "    gamma12"
for i in range (0, 4):
    strain = load1.list_ply_strains_12[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_12[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_12[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])


     layerNo eps11       eps22     gamma12
bottom   1 +0.002129 +0.002129 -0.007742
centroid 1 +0.002129 +0.002129 -0.007742
top      1 +0.002129 +0.002129 -0.007742
bottom   2 +0.002129 +0.002129 +0.007742
centroid 2 +0.002129 +0.002129 +0.007742
top      2 +0.002129 +0.002129 +0.007742
bottom   3 -0.001742 +0.006 -1.433e-18
centroid 3 -0.001742 +0.006 -1.519e-18
top      3 -0.001742 +0.006 -1.606e-18
bottom   4 +0.006 -0.001742 +6.576e-19
centroid 4 +0.006 -0.001742 +7.44e-19
top      4 +0.006 -0.001742 +8.303e-19

We will use Maximum Strain Failure Criterion to determine if any ply failed.


In [6]:
criterion1.MaxStrainCrit(load1, 0)
print "------------------------layer 1--------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
criterion1.MaxStrainCrit(load1, 1)
print "------------------------layer 2---------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
criterion1.MaxStrainCrit(load1, 2)
print "------------------------layer 3--------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
criterion1.MaxStrainCrit(load1, 3)
print "------------------------layer 4---------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
print "---------------------------------------------------------"


------------------------layer 1--------------------------
criterion1.ret_centroid =  [0.1373461377204494, 0.53221628366674079, 0.51613529205922271]
------------------------layer 2---------------------------
criterion1.ret_centroid =  [0.1373461377204494, 0.5322162836667409, 0.51613529205922271]
------------------------layer 3--------------------------
criterion1.ret_centroid =  [-0.11239674553401326, 1.4999699562777835, 1.0128838793372402e-16]
------------------------layer 4---------------------------
criterion1.ret_centroid =  [0.38708902097491188, -0.087107477788860257, 4.9597075459406951e-17]
---------------------------------------------------------

Layer 3 failed (the second component is larger than 1.0). The 6th layer also failed but results not shown.
In step 2 we degrade the failed layers by setting $E_2 = G_{12} = 0.1$
Define a new material with $E_2 = G_{12} = 0.1$ and update the laminate.


In [7]:
CarbonEpoxyFailed = pyPLY.CompositeMaterial()
CarbonEpoxyFailed.define("CarbonEpoxyFailed", "psi", E11=20e6, E22=0.01, G12=0.01, niu12=0.29, thk=0.005,
             Sigma_ut0 = 310e3, Sigma_uc0 = 310e3, Sigma_ut90 = 6e3, Sigma_uc90 = 30e3, Tau_u = 15e3)
             
layer3.change_Material_No_Lamina(2)
layer6.change_Material_No_Lamina(2)
layer3.update()
layer6.update()

laminate1.replace_Lamina(2, layer3)
laminate1.replace_Lamina(5, layer6)
laminate1.update()

The new [A] matrix of the laminate is:


In [8]:
Latex("$A_{degraded} = " + LXMatrix(laminate1.A, '.3e', ipython=True) + " lb/in$")


Out[8]:
$A_{degraded} = \left[\begin{array}{ccc} 3.338e+05 & 9.694e+04 & -1.819e-11\\ 9.694e+04 & 3.477e+05 & -3.638e-12\\ -1.819e-11 & -3.638e-12 & 1.138e+05 \end{array}\right] lb/in$

Check if this laminate can withstand the above load:

Note: again only half of laminate is reported on.

Ply stresses:


In [9]:
print "     layerNo", "sigma11", "      sigma22", "    tau12"
for i in range (0, 4):
    stress = load1.list_ply_stresses_12[i*3 + 0]
    print "bottom  ", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4e}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])
    stress = load1.list_ply_stresses_12[i*3 + 1]
    print "centroid", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4e}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])
    stress = load1.list_ply_stresses_12[i*3 + 2]
    print "top     ", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4e}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])


     layerNo sigma11       sigma22     tau12
bottom   1 +4.378e+04 +4.1455e+03 -7742.0
centroid 1 +4.378e+04 +4.1455e+03 -7742.0
top      1 +4.378e+04 +4.1455e+03 -7742.0
bottom   2 +4.378e+04 +4.1455e+03 +7742.0
centroid 2 +4.378e+04 +4.1455e+03 +7742.0
top      2 +4.378e+04 +4.1455e+03 +7742.0
bottom   3 -3.244e+04 +8.2943e+03 -1.433e-12
centroid 3 -3.244e+04 +8.2943e+03 -1.519e-12
top      3 -3.244e+04 +8.2943e+03 -1.606e-12
bottom   4 +1.2e+05 -3.2974e+00 +6.576e-13
centroid 4 +1.2e+05 -3.2974e+00 +7.44e-13
top      4 +1.2e+05 -3.2974e+00 +8.303e-13

Ply strains:


In [10]:
print "     layerNo", "eps11", "      eps22", "    gamma12"
for i in range (0, 4):
    strain = load1.list_ply_strains_12[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_12[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_12[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])
    print


     layerNo eps11       eps22     gamma12
bottom   1 +0.002129 +0.002129 -0.007742
centroid 1 +0.002129 +0.002129 -0.007742
top      1 +0.002129 +0.002129 -0.007742

bottom   2 +0.002129 +0.002129 +0.007742
centroid 2 +0.002129 +0.002129 +0.007742
top      2 +0.002129 +0.002129 +0.007742

bottom   3 -0.001742 +0.006 -1.433e-18
centroid 3 -0.001742 +0.006 -1.519e-18
top      3 -0.001742 +0.006 -1.606e-18

bottom   4 +0.006 -0.001742 +6.576e-19
centroid 4 +0.006 -0.001742 +7.44e-19
top      4 +0.006 -0.001742 +8.303e-19

Check using Maximum Strain Criterion:


In [11]:
criterion1.MaxStrainCrit(load1, 0)
print "------------------------layer 1--------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
criterion1.MaxStrainCrit(load1, 1)
print "------------------------layer 2---------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
criterion1.MaxStrainCrit(load1, 2)
print "------------------------layer 3--------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
criterion1.MaxStrainCrit(load1, 3)
print "------------------------layer 4---------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
print "---------------------------------------------------------"


------------------------layer 1--------------------------
criterion1.ret_centroid =  [0.1373461377204494, 0.53221628366674079, 0.51613529205922271]
------------------------layer 2---------------------------
criterion1.ret_centroid =  [0.1373461377204494, 0.5322162836667409, 0.51613529205922271]
------------------------layer 3--------------------------
criterion1.ret_centroid =  [-0.11239674553401326, 9.9997997085185566e-09, 1.0128838793372401e-24]
------------------------layer 4---------------------------
criterion1.ret_centroid =  [0.38708902097491188, -0.087107477788860257, 4.9597075459406951e-17]
---------------------------------------------------------

No layer failed. We can increase the load.
In step 3 we can increase the load at $N_x = 3598.5 lb/in$.


In [12]:
load1.change_Load(3598.5,0,0,0,0,0,0,0)
load1.apply_To(laminate1)
Note: only half of laminate is reported on

Layer stresses:


In [13]:
print "     layerNo", "sigma11", "      sigma22", "    tau12"
for i in range (0, 4):
    stress = load1.list_ply_stresses_12[i*3 + 0]
    print "bottom  ", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4e}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])
    stress = load1.list_ply_stresses_12[i*3 + 1]
    print "centroid", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4e}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])
    stress = load1.list_ply_stresses_12[i*3 + 2]
    print "top     ", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4e}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])


     layerNo sigma11       sigma22     tau12
bottom   1 +8.698e+04 +8.2357e+03 -1.5e+04
centroid 1 +8.698e+04 +8.2357e+03 -1.5e+04
top      1 +8.698e+04 +8.2357e+03 -1.5e+04
bottom   2 +8.698e+04 +8.2357e+03 +1.5e+04
centroid 2 +8.698e+04 +8.2357e+03 +1.5e+04
top      2 +8.698e+04 +8.2357e+03 +1.5e+04
bottom   3 -6.541e+04 +1.0781e-04 -2.9e-20
centroid 3 -6.541e+04 +1.0781e-04 -3.077e-20
top      3 -6.541e+04 +1.0781e-04 -3.254e-20
bottom   4 +2.346e+05 +1.9772e+02 +1.417e-12
centroid 4 +2.346e+05 +1.9772e+02 +1.593e-12
top      4 +2.346e+05 +1.9772e+02 +1.77e-12

Layer strains:


In [14]:
print "     layerNo", "eps11", "      eps22", "    gamma12"
for i in range (0, 4):
    strain = load1.list_ply_strains_12[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_12[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_12[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])


     layerNo eps11       eps22     gamma12
bottom   1 +0.004229 +0.004229 -0.015
centroid 1 +0.004229 +0.004229 -0.015
top      1 +0.004229 +0.004229 -0.015
bottom   2 +0.004229 +0.004229 +0.015
centroid 2 +0.004229 +0.004229 +0.015
top      2 +0.004229 +0.004229 +0.015
bottom   3 -0.00327 +0.01173 -2.9e-18
centroid 3 -0.00327 +0.01173 -3.077e-18
top      3 -0.00327 +0.01173 -3.254e-18
bottom   4 +0.01173 -0.00327 +1.417e-18
centroid 4 +0.01173 -0.00327 +1.593e-18
top      4 +0.01173 -0.00327 +1.77e-18

Check again against Maximum Strain Criterion.


In [15]:
criterion1.MaxStrainCrit(load1, 0)
print "------------------------layer 1--------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
criterion1.MaxStrainCrit(load1, 1)
print "------------------------layer 2---------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
criterion1.MaxStrainCrit(load1, 2)
print "------------------------layer 3--------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
criterion1.MaxStrainCrit(load1, 3)
print "------------------------layer 4---------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
print "---------------------------------------------------------"


------------------------layer 1--------------------------
criterion1.ret_centroid =  [0.27286032592909371, 1.0573337629752368, 0.99997328844619227]
------------------------layer 2---------------------------
criterion1.ret_centroid =  [0.27286032592909365, 1.0573337629752371, 0.99997328844619215]
------------------------layer 3--------------------------
criterion1.ret_centroid =  [-0.21099771686745103, 1.9548557858745652e-08, 2.051378623471961e-24]
------------------------layer 4---------------------------
criterion1.ret_centroid =  [0.75671836872563814, -0.16352323057227452, 1.0623307326708243e-16]
---------------------------------------------------------

Layer 1,2 failed.
In step 4 we degrade layers by setting $E_2 = G_{12} = 0.1$


In [16]:
layer1.change_Material_No_Lamina(2)
layer2.change_Material_No_Lamina(2)
layer7.change_Material_No_Lamina(2)
layer8.change_Material_No_Lamina(2)
layer1.update()
layer2.update()
layer7.update()
layer8.update()

laminate1.replace_Lamina(0, layer1)
laminate1.replace_Lamina(1, layer2)
laminate1.replace_Lamina(6, layer7)
laminate1.replace_Lamina(7, layer8)
laminate1.update()

The new [A] matrix of the laminate is:


In [17]:
Latex("$A_{degraded} = " + LXMatrix(laminate1.A, '.3e', ipython=True) + " lb/in$")


Out[17]:
$A_{degraded} = \left[\begin{array}{ccc} 3.013e+05 & 1.044e+05 & -1.819e-11\\ 1.044e+05 & 3.151e+05 & -7.276e-12\\ -1.455e-11 & -7.276e-12 & 1.100e+05 \end{array}\right] lb/in$

In [18]:
# only half of laminate is reported on
print "     layerNo", "sigma11", "      sigma22", "    tau12"
for i in range (0, 4):
    stress = load1.list_ply_stresses_12[i*3 + 0]
    print "bottom  ", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4e}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])
    stress = load1.list_ply_stresses_12[i*3 + 1]
    print "centroid", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4e}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])
    stress = load1.list_ply_stresses_12[i*3 + 2]
    print "top     ", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4e}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])


     layerNo sigma11       sigma22     tau12
bottom   1 +8.698e+04 +8.2357e+03 -1.5e+04
centroid 1 +8.698e+04 +8.2357e+03 -1.5e+04
top      1 +8.698e+04 +8.2357e+03 -1.5e+04
bottom   2 +8.698e+04 +8.2357e+03 +1.5e+04
centroid 2 +8.698e+04 +8.2357e+03 +1.5e+04
top      2 +8.698e+04 +8.2357e+03 +1.5e+04
bottom   3 -6.541e+04 +1.0781e-04 -2.9e-20
centroid 3 -6.541e+04 +1.0781e-04 -3.077e-20
top      3 -6.541e+04 +1.0781e-04 -3.254e-20
bottom   4 +2.346e+05 +1.9772e+02 +1.417e-12
centroid 4 +2.346e+05 +1.9772e+02 +1.593e-12
top      4 +2.346e+05 +1.9772e+02 +1.77e-12

In [19]:
print "     layerNo", "eps11", "      eps22", "    gamma12"
for i in range (0, 4):
    strain = load1.list_ply_strains_12[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_12[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_12[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])


     layerNo eps11       eps22     gamma12
bottom   1 +0.004229 +0.004229 -0.015
centroid 1 +0.004229 +0.004229 -0.015
top      1 +0.004229 +0.004229 -0.015
bottom   2 +0.004229 +0.004229 +0.015
centroid 2 +0.004229 +0.004229 +0.015
top      2 +0.004229 +0.004229 +0.015
bottom   3 -0.00327 +0.01173 -2.9e-18
centroid 3 -0.00327 +0.01173 -3.077e-18
top      3 -0.00327 +0.01173 -3.254e-18
bottom   4 +0.01173 -0.00327 +1.417e-18
centroid 4 +0.01173 -0.00327 +1.593e-18
top      4 +0.01173 -0.00327 +1.77e-18

In [20]:
criterion1.MaxStrainCrit(load1, 0)
print "------------------------layer 1--------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
criterion1.MaxStrainCrit(load1, 1)
print "------------------------layer 2---------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
criterion1.MaxStrainCrit(load1, 2)
print "------------------------layer 3--------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
criterion1.MaxStrainCrit(load1, 3)
print "------------------------layer 4---------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
print "---------------------------------------------------------"


------------------------layer 1--------------------------
criterion1.ret_centroid =  [0.27286032592909371, 7.0488917531682467e-09, 9.9997328844619228e-09]
------------------------layer 2---------------------------
criterion1.ret_centroid =  [0.27286032592909365, 7.0488917531682475e-09, 9.9997328844619212e-09]
------------------------layer 3--------------------------
criterion1.ret_centroid =  [-0.21099771686745103, 1.9548557858745652e-08, 2.051378623471961e-24]
------------------------layer 4---------------------------
criterion1.ret_centroid =  [0.75671836872563814, -0.16352323057227452, 1.0623307326708243e-16]
---------------------------------------------------------

No layer failed.
We can increase the load.
Step 5.


In [21]:
load1.change_Load(4133.7,0,0,0,0,0,0,0)
load1.apply_To(laminate1)

In [22]:
# only half of laminate is reported on
print "     layerNo", "sigma11", "      sigma22", "    tau12"
for i in range (0, 4):
    stress = load1.list_ply_stresses_12[i*3 + 0]
    print "bottom  ", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4e}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])
    stress = load1.list_ply_stresses_12[i*3 + 1]
    print "centroid", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4e}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])
    stress = load1.list_ply_stresses_12[i*3 + 2]
    print "top     ", i+1, '{0:+.4}'.format(stress[0,0]), '{0:+.4e}'.format(stress[1,0]), '{0:+.4}'.format(stress[2,0])


     layerNo sigma11       sigma22     tau12
bottom   1 +1.037e+05 +6.6857e-05 -0.0002063
centroid 1 +1.037e+05 +6.6857e-05 -0.0002063
top      1 +1.037e+05 +6.6857e-05 -0.0002063
bottom   2 +1.037e+05 +6.6857e-05 +0.0002063
centroid 2 +1.037e+05 +6.6857e-05 +0.0002063
top      2 +1.037e+05 +6.6857e-05 +0.0002063
bottom   3 -1.027e+05 +1.4011e-04 -3.407e-20
centroid 3 -1.027e+05 +1.4011e-04 -3.615e-20
top      3 -1.027e+05 +1.4011e-04 -3.822e-20
bottom   4 +3.097e+05 -9.6531e+02 +1.295e-12
centroid 4 +3.097e+05 -9.6531e+02 +1.503e-12
top      4 +3.097e+05 -9.6531e+02 +1.711e-12

In [23]:
print "     layerNo", "eps11", "      eps22", "    gamma12"
for i in range (0, 4):
    strain = load1.list_ply_strains_12[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_12[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_12[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])


     layerNo eps11       eps22     gamma12
bottom   1 +0.005183 +0.005183 -0.02063
centroid 1 +0.005183 +0.005183 -0.02063
top      1 +0.005183 +0.005183 -0.02063
bottom   2 +0.005183 +0.005183 +0.02063
centroid 2 +0.005183 +0.005183 +0.02063
top      2 +0.005183 +0.005183 +0.02063
bottom   3 -0.005134 +0.0155 -3.407e-18
centroid 3 -0.005134 +0.0155 -3.615e-18
top      3 -0.005134 +0.0155 -3.822e-18
bottom   4 +0.0155 -0.005134 +1.295e-18
centroid 4 +0.0155 -0.005134 +1.503e-18
top      4 +0.0155 -0.005134 +1.711e-18

In [24]:
criterion1.MaxStrainCrit(load1, 0)
print "------------------------layer 1--------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
criterion1.MaxStrainCrit(load1, 1)
print "------------------------layer 2---------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
criterion1.MaxStrainCrit(load1, 2)
print "------------------------layer 3--------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
criterion1.MaxStrainCrit(load1, 3)
print "------------------------layer 4---------------------------"
print "criterion1.ret_centroid = ", criterion1.ret_centroid
print "---------------------------------------------------------"


------------------------layer 1--------------------------
criterion1.ret_centroid =  [0.3343671373201747, 8.6378177141045056e-09, 1.3756154285774507e-08]
------------------------layer 2---------------------------
criterion1.ret_centroid =  [0.3343671373201747, 8.6378177141045072e-09, 1.3756154285774507e-08]
------------------------layer 3--------------------------
criterion1.ret_centroid =  [-0.33125323134633383, 2.5833010571322641e-08, 2.4096863360838467e-24]
------------------------layer 4---------------------------
criterion1.ret_centroid =  [0.99998750598668285, -0.25672125429340864, 1.0020609336375681e-16]
---------------------------------------------------------

The laminate failed completely.