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, what ESAComp does was identified and its behavior reproduced with FeResPost.
First, a function is defined that calculates 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 with their names. The function works as follows: a new ClaLam identical to the argument ClaLam is defined, 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, a function is defined 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, the ESAComp results are printed 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")
Differences are observed between the results obtained with “getESACompG” and “getNormalG”:
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 with respect to the 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.
For angles other than , or , the results obtained with “getESACompG” and “getNormalG” are different. This difference is explained by the approximation:
|
| (IV.3.1) |
|
| (IV.3.2) |
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.
The calculation of out-of-plane shear stresses in the laminate is also performed 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 . A corresponding loading rotated by is also defined 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:
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).
When , “ESAComp” results and “Normal” results for a same loading are identical. Otherwise, one observes difference between “ESAComp” results at and “Normal” results at (and vice versa).
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.
In fact, neither of the two calculation methods can be considered better than the other. (At least, as far as the precision of results is concerned.) However, the “Normal” calculation method is preferred because it is more consistent with usual expectations, 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 with respect to ply orientations in the laminate.