IV.3.5 Out-of-plane laminate shear response
The first example is presented in directory “TESTSAT/RUBY/EX14” and illustrates the out-of-plane
shear calculations. The example is contained in file “testShear.rb”. This example has been developed
for debugging purposes and is meant to compare the results of FeResPost with those of ESAComp.
After some research one identified what ESAComp does and reproduced its behavior with
FeResPost.
One first defines a function that calculations the ESAComp components of out-of-plane shear
stiffness matrix kA_44, kA_55, kA_45:
def getESACompG(db,lam,theta)
tmpLam=ClaLam.new
tmpLam.Id="tmpLam"
lam.each_ply do |plyIndex,plyData|
tmpLam.addPly(plyIndex,plyData[1],plyData[2],'
plyData[3]+theta,plyData[4])
end
tmpLam.calcLaminateProperties(db)
shearMat=tmpLam.get_G
ret={"kA_44"=>shearMat[1][1], "kA_55"=>shearMat[0][0],'
"kA_45"=>shearMat[0][1]}
end
The arguments of the function are:
- The composite ClaDb in which the materials and laminates definition is stored.
- A ClaLam object for which the stiffness matrix components are stored.
- A Real object containing the angle
by which the laminate is rotated.
The function returns a Hash containing the components of shear stiffness matrix
associated to their names. The function works as follows: one defines a new ClaLam
identical to the argument ClaLam, except that all the plies are rotated by the
argument
angle. Then the laminate properties are calculated and the stiffness matrix components are extracted at
(default direction in laminate axes for extraction function get_G).
Similarly, one defines a function supposed to return similar values in a more “classical” way
(according to FeResPost philosophy):
def getNormalG(db,lam,theta)
lam.calcLaminateProperties(db)
shearMat=lam.get_G(theta)
ret={"kA_44"=>shearMat[1][1], "kA_55"=>shearMat[0][0],'
"kA_45"=>shearMat[0][1]}
end
The methods “getESACompG” and “getNormalG” are used to print the components of shear
stiffness matrix according to the two calculation methods and as a function of the orientation
. For
example, one prints the ESAComp results with the following ruby lines:
os.printf("' n")
os.printf("Laminate stiffness as a function of theta :' n' n")
os.printf("%14s%14s%14s%14s' n","Theta","kA_44","kA_55","kA_45")
(-90..90).step(5) do |i|
theta=1.0*i
ret=getESACompG(db,lam,theta)
os.printf("%14d%14g%14g%14g' n",i,ret["kA_44"],ret["kA_55"],'
ret["kA_45"])
end
os.printf("' n' n")
One observes differences between the results obtained with “getESACompG” and “getNormalG”:
-
1.
- Note that in the “ESAComp” version the angle
is the angle by which the laminate is rotated. In the “Normal” version, it is the angle
at which the shear stiffness components are recovered (angle wrt laminate axes). So the
ESAComp results for an angle
should be compared to the “Normal” results for an angle .
However in this case the dependence on
is even and no difference can be observed.
-
2.
- For angles
other than ,
or
,
the results obtained with “getESACompG” and “getNormalG” are different. This difference is
explained by the approximation:
that has been done in section II.1.6.3. The example illustrates one of the consequences of the
approximation: the loss of objectivity in out-of-plane shear equations.
One also performs the calculation of out-of-plane shear stresses in laminate for a simple loading in three different
directions: ,
or
. Here
again the loading is applied in two ways: with the “ESAComp” method or the “Normal” one. For
example, the printing of ply stresses with “ESAComp” method is done as follows:
def writeESACompShearStresses(os,db,lam,theta,ld)
tmpLam=ClaLam.new
tmpLam.Id="tmpLam"
lam.each_ply do |plyIndex,plyData|
tmpLam.addPly(plyIndex,plyData[1],plyData[2],'
plyData[3]+theta,plyData[4])
end
tmpLam.calcLaminateProperties(db)
tmpLam.calcResponse(db,0.0,ld,true,false,true)
sigTab=tmpLam.getPliesStresses
os.printf(" %8s%5s%14s%14s' n","Ply","Pos.","tau_13","tau_23")
(0...sigTab.size).each do |i|
os.printf(" %8d%5s",sigTab[i][0],sigTab[i][1])
os.printf("%14g%14g",sigTab[i][6],sigTab[i][5])
os.printf("' n")
end
end
The loading applied to laminate is defined by a pure out-of-plane shear force components
and
. One also defines a corresponding
loading rotated by and defined
by its components . This new
loading is tested for direction
only. The ply stress results obtained with the different versions of loading and calculations methods
can be compared and the following comments are made:
-
1.
- Here again, the “ESAComp” results are obtained by rotating the laminate by an angle
.
For “Normal” results, the loading is rotated by an angle .
Therefore “ESAComp” results at
are to be compared to “Normal” results at
(and vice versa).
-
2.
- When ,
“ESAComp” results and “Normal” results for a same loading are identical. Otherwise,
one observes difference between “ESAComp” results at
“Normal” results at
(and reversely).
-
3.
- For “Normal” calculation method the loading ld45 at
gives the same results as ld at .
For “ESAComp” calculation method the loading ld45 at
does not give the same results as ld at .
“Normal” calculation method is more in line with usual expectations.
Actually, none of the two calculation methods can be considered as better than the other. (At least, as far
as the precision of results is concerned.) We think however that “Normal” calculation method is better
because it is likely to give unexpected results as shown in the example. Moreover, the associated
computation cost is lower. (This will be important when finite element results are post-processed.)
Note however, that the “Normal” calculation method also suffers from a lack of objectivity wrt to ply
orientations in the laminate.