Professional Documents
Culture Documents
Corotational Formulation For Beams.: September 2015
Corotational Formulation For Beams.: September 2015
net/publication/281444684
CITATIONS READS
0 2,582
1 author:
Aashish Ahuja
Becton, Dickinson and Company (BD)
12 PUBLICATIONS 59 CITATIONS
SEE PROFILE
Some of the authors of this publication are also working on these related projects:
All content following this page was uploaded by Aashish Ahuja on 03 September 2015.
Abstract
The corotational beam formulation considers a beam element with reference to the local, element-based coor-
dinate system. Using this approach, any frame structure undergoing arbitrarily large displacements and rotations
at the global level can be solved by decomposing the motion of its beam elements into their corresponding rigid
body and pure deformational motions. The current paper tries to model two different corotational formulations
based on Kirchhoff and Timoshenko beam theories. The difference in the formulations arises from the assump-
tions incorporated to represent local deformations. In the first case, the results for a linearly elastic cantilever
beam with an end point vertical load undergoing large deformation is computed. In the second case, another
linearly elastic cantilever beam is loaded by an end moment such that it is rolled into a circle.
INTRODUCTION
The corotational method formulates beam elements with reference to a local, element-based, coordinate system.
The local beam strains are considered to be small in this frame of reference and all beam elements are assumed
to be linearly elastic. Furthermore, the deformation of beam within this local frame of reference can be modeled
by ‘approximate beam theory’. As with any corotational method, three ingredients are required: 1) the relations
between the global and local variables, 2) the angle of rotation of the corotating frame and 3) a variationally
consistent tangential stiffness matrix.
The codes for formulations based on both, Kirchhoff and Timoshenko beam theories, have been implemented in
PyFEM and are included in the Appendix.
COROTATIONAL CONCEPT
Consider the corotational concept in terms of beam elements. As a frame structure is loaded, the entire frame
deforms from its original configuration. During this process an individual beam element potentially does three
things: it rotates, translates and deforms. The global displacements of the end nodes of the beam element include
information about how the beam element has rotated, translated and deformed. The rotation and translation are
rigid body motions, which may be removed from the motion of the beam. If this is done, all that remains are the
strain causing deformations of the beam element. The strain causing local deformations are related to the forces
induced in the beam element. This is achieved by attaching a corotating frame with the beam element such that
the X` -axis is always directed along the element. The Y` -axis is perpendicular to the X` -axis so that the resultant
frame is a right handed orthogonal coordinate system. With respect to this local corotating coordinate frame, the
rigid body rotations and translations are zero and only local strain producing deformations remain.
KIRCHHOFF THEORY
The following derivation is closely based on the theory given by (Crisfield 1991) and (Yaw 2009). The formulation
assumes that there is no shear deformation in the beam and thus, the cross-section of the beam is always normal
to the centerline.
Axial strain
For the beam in its initial configuration, the the global nodal coordinates are defined as (X1 , Y1 ) for node 1 and
(X2 , Y2 ) for node 2. The original length of the beam is
p
`0 = (x2 − x1 )2 + (y2 − y1 )2 (1)
1
For the beam element in its current configuration the global nodal coordinates are (X1 + u1 , Y1 + w1 ) for node
1 and (X2 + u2 , Y2 + w2 ) for node 2, where for example, u1 is the global nodal displacement of node 1 in the
X-direction and w1 is the global nodal displacement of node 1 in the Y-direction [Fig.1].
u` = ` − `0 (3)
There is a possibility that [Eq.(3)] is badly conditioned for use in a numerical setting. Therefore, it is suggested
that u` be multiplied by (`+` 0)
(`+`0 ) for better conditioning
`2 − `20
u` = (4)
` + `0
[Eq.(4)] essentially provides the relationship between global displacements and the local axial deformation (rela-
tion between global and local variables). The axial strain is assumed constant and is calculated as εxl = u` /`o .
The axial force in the beam is then
EAu`
N= (5)
`o
2
Flexural deformations
Consider the beam element in its initial and current configurations as shown in [Fig.2]. The beam undergoes
translation, rotation and has local flexural deformations. In the initial and current configurations, a line is drawn
from node 1 to node 2 which is used as a reference line and is the local x-axis. The angles θ1 and θ2 are the global
nodal rotations calculated from the global matrix equations and are measured from lines parallel to the initial
configuration of the beam element. If the initial and final angles of the bar, βo and β, are known, then the local
nodal rotations are
θ1` = θ1 + β0 − β, θ2` = θ2 + β0 − β (7)
The initial angle of the bar is computed and stored as
−1 Y2 − Y1
βo = tan (8)
X2 − X1
The value of β computed using [Eq.(9)] is only valid for |β| < π/2 due to the use of tan−1 function. However,
it is preferable to avoid any limitation on the range of rotation of the element. To achieve this, the approach of
(De Souza 2000) is given as follows. Assuming that the local rotations are moderate, [Eq.(7)] is modified to
where β1 = θ1 + βo .
Also,
cos θ1` = cos(θ1 + βo − β) = cos(β1 − β) = cos β cos β1 + sin β sin β1 (11)
For node 1, using [Eq.(10)] and [Eq.(11)]
cos β sin β1 − sin β cos β1
θ1` = tan−1 (12)
cos β cos β1 + sin β sin β1
3
where β2 = θ2 + βo .
Using standard structural analysis, it is shown that the local end moments of the beam are related to the arbitrary
local nodal rotations as follows:
M1 2EI 2 1 θ1`
= (14)
M2 `o 1 2 θ2`
Since the only local displacement is due to axial strain and local transverse displacements are zero, the local
transverse shear forces are calculated based on simple statics once the end moments are known in the local system.
Assuming no forces are applied between the nodes of a beam element, and summing moments around node 2, the
shear force at node 1 is
M1 + M2
V1 = (15)
`
Summing forces vertically in the local system gives V2 = −V1 .
T T
cos β cos β δu2 − δu1
δu` = e1 T δd21 = δd21 = (16)
sin β sin β δw2 − δw1
where, e1 is the unit vector lying along the line drawn between the beam nodes in the current configuration. The
right hand side of [Eq.16] is rewritten as:
where δp is the variation of the global displacement vector pT = [u1 w1 θ1 u2 w2 θ2 ]. The above equation gives
the relationship between the infinitesimal local axial deformation and the infinitesimal global nodal displacements.
Next, a relationship is calculated between local infinitesimal nodal rotations and the global nodal displacements.
An infinitesimal rigid rotation from the current configuration along the unit vector e2 T = [− sin β cos β], gives
for an infinitesimal angle change, an arc length change of `δβ = e2 T δd21 , such that
1 T
δβ = e2 δd21 (18)
`
4
The above equation is expressed in terms of the variation of global displacement and can be rewritten as
T
1 − sin β δu2 − δu1
δβ =
` cos β δw2 − δw1
1 (19)
= (sin βδu1 − cos βδw1 + 0δθ1 − sin βδu2 + cos βδw2 + 0δθ2 )
`
1
= [ sin β − cos β 0 − sin β cos β 0 ]δp
`
We can define [Eq.(19)] in a compact form by introducing z such that
1 T
δβ = z δp (20)
`
From [Eq.(7)], the variation of δθ` is given as
θ1 + βo − β δθ1 + δβo − δβ δθ1 − δβ
δθ` = δ = = (21)
θ2 + βo − β δθ2 + δβo − δβ δθ2 − δβ
where it is recognized δβo = 0. Now, substituting for [Eq.(19)] in the above expression.
T
δθ1` 0 0 1 0 0 0 z
δθ` = = δp − 1` δp = AT δp (22)
δθ2` 0 0 0 0 0 1 zT
The complete vector of infinitesimal local strain producing deformations is formulated using the result of [Eq.(22)]
and [Eq.(17)]
δu` T
r
δp` = δθ1` = δp = Bδp (23)
AT
δθ2`
and the final matrix form for B is
− cos β − sin β 0 cos β sin β 0
B = − sin β/` cos β/` 1 sin β/` − cos β/` 0 (24)
− sin β/` cos β/` 0 sin β/` − cos β/` 1
where qi is the vector of global internal forces for element i, qli = [N M1 M2 ] and a subscript v implies a
virtual quantity. Then using [Eq.(23)] in the above equation gives
qi = B T q`i (27)
where δB 1 , for example. is the variation of the first column of B. The terms on the R.H.S. of [Eq.(28)] are
analyzed one-by-one starting with the variation of q`i and using [Eq.(5)] and [Eq.(14)] we get
EA
δN `o 0 0
δq`i = δM 1 = 0 4 EI
`o 2 EI
`o
δp` = C` δp` (29)
δM 2 0 2 EI
`o
EI
4 `o
5
Substituting [Eq.(29)] in [Eq.(28)] and using the result in [Eq.(23)] yields
Therefore,
K1 = B T C` B (31)
which is the standard transformed global tangent stiffness (material stiffness) matrix for a 2D beam element. The
last three terms on the R.H.S. of [Eq.(28)] contribute to the geometric stiffness. Taking the variation of the first
column of B T
δB 1 = δr = δ[− cos β − sin β 0 cos β sin β 0]T
(32)
= [sin β − cos β 0 − sin β cos β 0]T δβ = zδβ
1 T
δB 1 = zz δp (33)
`
Next, taking the variation of second column of B T gives
1 1 1
δB 2 = δ − z = δ − z+ − δz (34)
` ` `
The value of z was calculated in [Eq.(32)] which is used to calculate the value of δz
sin β cos β
− cos β sin β
0 0 1 T
δz = δ = − cos β δα = −rδα = − ` rz δp (35)
− sin β
cos β − sin β
0 0
1 δu` 1
δ − = (−1)(−`−2 )δ` = 2 = 2 r T δp (36)
` ` `
where δ` = δ`o + δu` = δu` .
Finally, δB 2 becomes
1
δB 2 = (rz T + zr T )δp (37)
`2
By inspection of B T , it is evident that δB 3 = δB 2 . Using [Eq.(37)] and [Eq.(33)] in [Eq.(28)]
N T M1 + M2
K2 = zz + (rz T + zr T ) (38)
` `2
The resultant variationally consistent tangent stiffness matrix is the sum of K1 + K2 . Therefore
N T M1 + M2
K = K1 + K2 = B T C ` B + zz + (rz T + zr T ) (39)
` `2
6
• I = the vector of element 2nd area moments of inertia, moment of inertia for element i is Ii
• F = the total vector of externally applied global nodal forces
• F n+1 = the current externally applied global nodal force vector
• q ` = the storage vector of local forces (N , M 1 and M 2 ).
• u = the vector of global nodal displacements, initially u = 0
• x = the vector of nodal x coordinates in the undeformed configuration
• y = the vector of nodal y coordinates in the undeformed configuration
• ` = the vector of beam element lengths based on current u using [Eq.(2)], ` for beam i is `i .
• cos β and sin β = the vectors of cosines and sines for each beam element angle, β, based on the current
u [Eq.(6)]
• K = the resultant tangential stiffness matrix for an element. The assembled global tangential stiffness
matrix, Ka is obtained from the assembly of element tangential stiffness matrices.
2. Start loop over the equal load increments (for n = 0 to (# of increments, ninc)-1 ) using the Newton-
Raphson procedure.
• Calculate load factor λ = 1/ninc and incremental force vector dF = λF
• Calculate global stiffness matrix Ka based on current values of cos β, sin β, `, `o , A, E, I and q` .
• Modify Ka by accounting for displacement constraints.
• Solve for the incremental global nodal displacements du = K−1
a dF
• Update global nodal displacements, un+1 = un + du
• Update the global nodal forces, F n+1 = F n + dF
• Update element data using ucurrent = un+1
• Construct the vector of internal global forces F n+1 n+1
int based on q ` . Steps include:
1.) q` is an assembly of q`i . For a frame structure with nm elements, the vector q` is 3nm × 1 in
size. q`i is a three term vector which is extracted from q` for beam element i.
2.) Use [Eq.(27)], to calculate qi from q`i
qi = B T q`i (40)
un+1 n+1
f inal = u(0) + δu(k) (42)
7
TIMOSHENKO BEAM THEORY
The preceding derivation for corotational beam element based on Kirchhoff’s assumptions can be modified to
incorporate shear deformation resulting in Timoshenko beam theory. The present paper expands on the procedure
and calculations described in (Krenk 2009) and (Crisfield 1991). The following method largely remains similar to
the description in the section on Kirchhoff’s theory. The differences lies in the definitions of element deformation
modes or local strains and the consequent formulation of global tangential stiffness matrix.
As stated earlier, the idea of the corotating formulation is to separate the motion into two parts: a rigid body
motion associated with the motion of the local frame of reference, and motion describing the deformation of the
beam within this frame.
The three element deformation modes or local strains are illustrated in [Fig.5]. The extension mode in [Fig.5a]
consists of an axial translation of magnitude 21 du of the nodes 1 and 2, increasing their distance by du. This value,
8
du is calculated from the difference between current beam element length, ` (calculated in [Eq.(2)]) and original
length, `o (calculated in [Eq.(1)]). The extension deformation mode of the beam element is calculated as:
u` = ` − `0 (43)
The symmetric bending mode shown in [Fig.5b] is defined by a rotation 12 dφs of the node points, clockwise at 1
and counterclockwise at 2. Finally, the anti-symmetric bending mode shown in [Fig.5c] is defined by a counter-
clockwise rotation 12 dφa at both end-points. Three generalized force components [Fig.6] are defined conjugate to
the displacement components of the deformation modes.
The extension mode corresponds to a normal force N , shown in [Fig.6a]. The symmetric bending mode corre-
sponds to a moment Ms at the end nodes, clockwise at node 1 and counterclockwise at node 2 [Fig.6b]. The
anti-symmetric bending mode corresponds to a counterclockwise moment Ma at both end nodes. While gen-
eralized forces N and Ms are equilibrium systems, moment Ma in the anti-symmetric bending mode must be
complemented by shear forces Q = −2Ma /` as shown in [Fig.6c]. The following notations are used to represent
the components of the deformation modes and the corresponding equilibrium force systems:
The terms v and t described in [Eq.(44)] are analogous to p` and q `i , respectively, defined in the preceding
section on Kirchhoff theory. Also, p and q i have been used for global displacements and global internal forces,
respectively, defined in the fixed frame of reference.
Thus,
q i = Re q e (46)
The first transformation, giving the full set of generalized forces in a local frame, is expressed as
q e = St (47)
9
where the 6 × 3 transformation matrix S is
−1 0 0 1 0 0
ST = 0 0 −1 0 0 1 (48)
2 −2
0 ` 1 0 ` 1
Substituting [Eq.(47)] in [Eq.(46)], the resulting equation transforms the local generalized forces into global in-
ternal force vector.
q i = Re St (49)
where dφ = (duB A
y − duy )/`.
0 0 0
−2
0 0 `2
0 0 0
dS = d` (52)
0 0 0
−2
0 0 `2
0 0 0
where d` = [duB A
x − dux ].
Before dt can be defined, the terms {dN, dMs , dMa } need to calculated:
1. From the extension mode:
EA EA
N= u, dN = du (53)
` `
2. Symmetric bending mode for linear elastic beam
Z `
Ms EI
Ms ds = Ms φs ⇒ Ms = φs (54)
0 EI `
EI
dMs = dφs (55)
`
3. Antisymmetric bending mode with shear forces
Z ` −1
(Ma + Qs)2 Q2
EI 12EI
+ ds = Ma φa ⇒ Ma = 3 1+ 2 φa (56)
0 EI GA ` ` GA
where G is the shear modulus.
EI
dMa = 3ψa dφa (57)
`
Using [Eq.(53)], [Eq.(55)] and [Eq.(57)], one can express dt as:
dN EA 0 0 du
dMs = 1 0 EI 0 dφs (58)
`
dMa 0 0 3ψa EI dφa
| {z } | {z } | {z }
dt Kd dv
10
or,
dt = Kd dv (59)
The ingredients required to calculate the terms in the R.H.S of [Eq.(50)] have been computed before. Each term in
the R.H.S of [Eq.(50)] is expanded and the final tangential stiffness matrix is derived by adding all the expanded
expressions together.
The first term in the R.H.S of [Eq.(50)] is given as
The second term gives the change in shear force due to change in `
0 0 0
0 0 −2 !
`2 N
A 0 0 0
Re dSt = Re [duB
x − du ]
x 0 0 Ms (61)
0
0 0 −2
M a
`2
0 0 0
0 0 0 0 0 0
−Q 0 0 Q 0 0
1 0 0 0 0 0 0 Re T dp, Q = −2Ma
⇒ Re (62)
`
0 0 0 0 0 0
`
Q 0 0 −Q 0 0
0 0 0 0 0 0
The third term in RHS represents stiffness due to corotating frame of reference.
dq i
K= (66)
dp
0 −Q 0 0 Q 0
−Q N 0 Q −N 0
1 0 0 0 0 0 0
K = Re SKd S T Re T Re T
+ Re (67)
`
0 Q 0 0 −Q 0
Q N 0 −Q N 0
0 0 0 0 0 0
11
Figure 7: Deformed beam element in 2D problem
In the corotation format the element properties are first obtained in a local element-based frame of reference and
are subsequently transformed into the global frame. For two-dimensional co-rotating beam element problems the
formation of element forces and stiffness matrix can be arranged as described in the following algorithm.
Figure 8: Algorithm to define two dimensional beam elements based on Timoshenko beam theory
The beam element tangential stiffness matrix and element force vector are assembled for all the elements that are
present in the frame. An implicit formulation which uses Newton-Raphson iterations at the global level is used to
achieve equilibrium during each incremental load step.
EXAMPLE PROBLEMS
Cantilever Beam with Tip Load solved
A cantilever beam is loaded by a point load at its free end [Fig.9]. The load displacement results for the tip from
Kirchhoff beam theory are compared to the solution obtained from Timoshenko beam theory in [Fig.10]. The
load displacement is linear for small loads, but as the load increases the curve is clearly nonlinear. As the load
increases further the structure becomes stiffer, which is caused by tension stiffening of the beam in its deformed
configuration. The analysis is completed in 20 load increments. An additional vertical load of 0.5kips is applied
to the tip with every increment. For this example, all beam members have a cross-sectional area, A = 4.0in2 ,
second area moment of inertia, I = 1.3333in4 , polar moment of inertia, J = 2.6666in4 , modulus of elasticity,
E = 100ksi and shear modulus, 38.5ksi. The beam is 10 inches long and is discretized with 7 equal length beam
elements and 8 nodes. The tolerance used for equilibrium iterations is 10−3 .
It is observed that the solutions obtained from the two theories match only for small values of tip loads. They
diverge as the force being applied becomes larger in value.
12
Figure 9: Initial and final configuration of a cantilever beam loaded with end point load
Figure 10: Comparison between solution obtained from the two beam theories
13
Figure 11: Initial, intermediate and final configuration of a cantilever beam loaded with end moment
CONCLUSION
The paper contains derivations and explanation of the ingredients of a 2D corotational beam formulation. The
corotational formulation for both beam theories, Kirchhoff and Timoshenko, are given and proved in great detail.
The algorithms and the codes for the formulations are also provided. The flexibility of PyFEM allows carefree
integration of cororotational method with the rest of the package. Numerical results for examples are provided
using both beam theories. The corotational method is an effective scheme for including large displacements and
large rotations in a common 2D frame analysis program.
References
Crisfield, M. (1991). “Nonlinear finite element analysis of solids and structures.” volume 1.John Wiley and Sons
Ltd., Chichester, England.
De Souza, R. M. (2000). Force-based finite element for large displacement inelastic analysis of frames. Ph.D.
thesis, University of California, Berkeley.
Krenk, S. (2009). “Non-linear modeling and analysis of solids and structures.” pages 100–144.Cambridge Uni-
versity Press, Cambridge, London.
Yaw, L. (2009). “2D Corotational Beam Formulation.”
APPENDIX
14
Code for formulating Kirchhoff Beam Element
##############################################
# Corotational Kirchoff beam element. No #
# shear stress calculations for this element #
##############################################
from numpy import zeros, dot, array, eye, outer, mat, empty,sqrt
from scipy.linalg import norm
from math import atan2, sin, cos, tan
import time
import inspect
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
# There are 9 degrees of freedom in an element. 6 translations for the 3 nodes
# and 3 rotations for the 3 nodes.
def getTangentStiffness ( self, elemdat ):
"""The tangent stiffness matrix is easily found by exact integration
since all the terms are simply constants. Depends on local forces of the
different element members that make up the beam"""
15
Code for formulating Kirchhoff Beam Element
# 2nd term:
z = array( [sbeta,-cbeta,0,-sbeta,cbeta,0] )
stiff += ( qli[0]/lc )*outer(z,z)
# 3rd term
v = array( [-cbeta,-sbeta,0,cbeta,sbeta,0] )
r = outer(v,z)
stiff += ( ( qli[1] + qli[2] )/(lc**2 ) )*( r + r.transpose() )
elemdat.fint = dot(B.transpose(),qli)
elemdat.stiff = stiff
elemdat.outlabel.append("forces")
elemdat.outdata = zeros( shape=(len(elemdat.nodes),3) )
elemdat.outdata[0,:] = elemdat.fint[0:3]
elemdat.outdata[1,:] = elemdat.fint[3:6]
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
def getMemberData(self,elemdat ):
"""The objective of this section is to include updated data about
each member in the beam."""
16
Code for formulating Kirchhoff Beam Element
dX = elemdat.coords[1][0] + elemdat.state[3] - \
( elemdat.coords[0][0] + elemdat.state[0] )
dY = elemdat.coords[1][1] + elemdat.state[4] - \
( elemdat.coords[0][1] + elemdat.state[1] )
# Axial force
Nf = self.EA*ul/l0
# Calculate beta
beta = atan2( dY,dX )
# beta1 and beta2 are calculated using the theta(1 and 2) values that
# are solved from the global set of equations. For each element, the
# values for the dofs at the nodes are saved in elemdat.state
beta1 = elemdat.state[2] + beta0
beta2 = elemdat.state[5] + beta0
return B, qli,lc,l0,cbeta,sbeta
#------------------------------------------------------------------------------
17
Code for formulating Timoshenko Beam Element
##############################################
# Corotational Timoshenko beam element. #
# Shear deformation is calculated for #
# this element #
##############################################
from numpy import zeros, dot, array, eye, outer, mat, empty,sqrt
from scipy.linalg import norm
from math import atan2, sin, cos, tan,pi
import time
import inspect
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
#
#------------------------------------------------------------------------------
# There are 9 degrees of freedom in an element. 6 translations for the 3 nodes
# and 3 rotations for the 3 nodes.
def getTangentStiffness ( self, elemdat ):
"""The tangent stiffness matrix is easily found by exact integration
since all the terms are simply constants. Depends on local forces of the
different element members that make up the beam"""
18
Code for formulating Timoshenko Beam Element
# Constituitive transformation
KD = Kd1 + Kd2
KD = dot( S,dot( KD,S.transpose() ) )
elemdat.outlabel.append("forces")
elemdat.outdata = zeros( shape=(len(elemdat.nodes),3) )
19
Code for formulating Timoshenko Beam Element
elemdat.stiff = stiff
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
def getMemberData(self,elemdat ):
"""The objective of this section is to include updated data about
each member in the beam."""
# Initial angle made by the beam member
# beta0 = atan( y2-y1 / x2-x1 )
beta0 = atan2( ( elemdat.coords[1][1] - elemdat.coords[0][1] ),\
( elemdat.coords[1][0] - elemdat.coords[0][0] ) )
# The angle made by beam member for the current time step with the
# fixed frame of reference.
beta1 = elemdat.state[2] + beta0
beta2 = elemdat.state[5] + beta0
20
Code for formulating Timoshenko Beam Element
t = array( [Nf,Ms,Ma] )
return rot_matrix,S,t,lc,l0,psi
#------------------------------------------------------------------------------
21