FeResPost Web Site                     FeResPost Online User Manual

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, 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 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 0o (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”:

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 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.

2.

For angles θ other than - 90o, 0o or 90o, the results obtained with “getESACompG” and “getNormalG” are different. This difference is explained by the approximation:

Qxz = Mxx,x,
(IV.3.1)

Qyz = Myy,y,
(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: - 45o, 0o or 45o. 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 Qxz = 1000000 and Qyz = 0. A corresponding loading rotated by 45o is also defined and defined by its components Qxz = Qyz = 707107. This new loading is tested for direction θ = 0o 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 θ = -45o are to be compared to “Normal” results at θ = 45o (and vice versa).

2.

When θ = 0o, “ESAComp” results and “Normal” results for a same loading are identical. Otherwise, one observes difference between “ESAComp” results at θ = -45o and “Normal” results at θ = 45o (and vice versa).

3.

For “Normal” calculation method the loading ld45 at θ = 0o gives the same results as ld at θ = 45o. For “ESAComp” calculation method the loading ld45 at θ = 0o does not give the same results as ld at θ = -45o. “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.