Académique Documents
Professionnel Documents
Culture Documents
Iso-P Quadrilateral
Ring Elements
11–1
Chapter 11: ISO-P QUADRILATERAL RING ELEMENTS 11–2
TABLE OF CONTENTS
Page
§11.1. INTRODUCTION 11–3
§11.2. ORGANIZATION OF ELEMENT MODULES 11–3
§11.3. TWO-DIMENSIONAL 2D GAUSS RULES 11–4
§11.4. THE 4-NODE QUADRILATERAL RING ELEMENT 11–5
§11.4.1. Shape Function Evaluation . . . . . . . . . . . . . 11–5
§11.4.2. Element Stiffness . . . . . . . . . . . . . . . 11–6
§11.4.3. Stiffness Test . . . . . . . . . . . . . . . . . 11–7
§11.4.4. Test of Rectangular Geometry . . . . . . . . . . . 11–7
§11.4.5. Consistent Node Forces for Body Force Field . . . . . . . 11–9
§11.4.6. Recovery of Element Corner Stresses . . . . . . . . . 11–11
§11.5. THE 9-NODE QUADRILATERAL RING ELEMENT 11–14
§11.6. THE 16-NODE QUADRILATERAL RING ELEMENT 11–14
EXERCISES . . . . . . . . . . . . . . . . . . . . . . 11–15
11–2
11–3 §11.2 ORGANIZATION OF ELEMENT MODULES
§11.1. INTRODUCTION
This Chapter illustrates the computer implementation of isoparametric quadrilateral elements for
the axisymmetric problem. These are called ring elements. Triangles, which present some pro-
gramming quirks, are covered in the next Chapter.
The Chapter covers 4-node, 9-node and 16-node quadrilaterals, with most detail devoted to the
4-node model. It describes the computation of the element stiffness matrix, consistent node force
vector for a body force field and recovery of element stresses from displacements.
η
z 3 (r 3 , z 3)
η=1
4 (r 4 , z 4)
ξ=1
ξ=−1 ξ
1 (r 1 , z 1) η=−1
2 (r 2 , z 2)
For 2D and 3D elements iso-P elements it is convenient to break up the implementation into
application dependent and application independent modules, as sketched in Figure 11.2. The
application independent modules can be “reused” in other FEM applications, for example to form
thermal, fluid or electromagnetic elements.
For the 4-node quadrilateral studied here, the subdivision of Figure 11.2 is done through the fol-
lowing modules:
11–3
Chapter 11: ISO-P QUADRILATERAL RING ELEMENTS 11–4
APPLICATION DEPENDENT
Element
Stiffness Module
APPLICATION INDEPENDENT
QuadGaussRuleInfo[{rule_,numer_},point_]:= Module[
{ξ ,η,p1,p2,i1,i2,w1,w2,k,info=Null},
If [Length[rule]==2, {p1,p2}=rule,p1=p2=rule];
If [Length[point]==2,{i1,i2}=point,
k=point; i2=Floor[(k-1)/p1]+1; i1=k-p1*(i2-1) ];
{ξ ,w1}= LineGaussRuleInfo[{p1,numer},i1];
{η,w2}= LineGaussRuleInfo[{p2,numer},i2];
info={{ξ ,η},w1*w2};
If [numer,Return[N[info]],Return[Simplify[info]]];
];
LineGaussRuleInfo[{rule_,numer_},point_]:= Module[
{g2={-1,1}/Sqrt[3],w3={5/9,8/9,5/9},
g3={-Sqrt[3/5],0,Sqrt[3/5]},
w4={(1/2)-Sqrt[5/6]/6,(1/2)+Sqrt[5/6]/6,
(1/2)+Sqrt[5/6]/6,(1/2)-Sqrt[5/6]/6},
g4={-Sqrt[(3+2*Sqrt[6/5])/7],-Sqrt[(3-2*Sqrt[6/5])/7],
Sqrt[(3-2*Sqrt[6/5])/7],Sqrt[(3+2*Sqrt[6/5])/7]},
i=point,info=Null},
If [rule==1,info={0,2}];
If [rule==2,info={g2[[i]],1}];
If [rule==3,info={g3[[i]],w3[[i]]}];
If [rule==4,info={g4[[i]],w4[[i]]}];
If [numer,Return[N[info]],Return[Simplify[info]]];
];
11–4
11–5 §11.4 THE 4-NODE QUADRILATERAL RING ELEMENT
The first form is used to get information for point {i, j} of the p × p rule, in which 1 ≤ i ≤ p and
1 ≤ j ≤ p. The second form specifies that point by a “visiting counter” k that runs from 1 through
p 2 ; if so {i, j} are internally extracted1 as j=Floor[(k-1)/p]+1; i=k-p*(j-1).
If the integration rule has p1 points in the ξ direction and p2 points in the η direction, the module
may be called also in two ways:
The meaning of the second argument is as follows. In the first form i runs from 1 to p1 and j from 1 to
p2 . In the second form k runs from 1 to p1 p2 ; if so i and j are extracted by j=Floor[(k-1)/p1]+1;
i=k-p1*(i-1).
In all four forms flag numer is set to True if numerical information is desired and to False if exact
information is desired. The module returns ξi and η j in xii and etaj, respectively, and the weight
product wi w j in wij.
Quad4IsoPShapeFunDer[ncoor_,qcoor_]:= Module[
{Nf,dNr,dNz,dNξ ,dNη,i,J11,J12,J21,J22,Jdet,ξ ,η,
r1,r2,r3,r4,z1,z2,z3,z4,r,z},
{ξ ,η}=qcoor; {{r1,z1},{r2,z2},{r3,z3},{r4,z4}}=ncoor;
Nf={(1-ξ )*(1-η),(1+ξ )*(1-η),(1+ξ )*(1+η),(1-ξ )*(1+η)}/4;
dNξ ={-(1-η), (1-η),(1+η),-(1+η)}/4;
dNη= {-(1-ξ ),-(1+ξ ),(1+ξ ), (1-ξ )}/4;
r={r1,r2,r3,r4}; z={z1,z2,z3,z4};
J11=dNξ .r; J12=dNξ .z; J21=dNη.r; J22=dNη.z;
Jdet=Simplify[J11*J22-J12*J21];
dNr= ( J22*dNξ -J12*dNη)/Jdet; dNr=Simplify[dNr];
dNz= (-J21*dNξ +J11*dNη)/Jdet; dNz=Simplify[dNz];
Return[{Nf,dNr,dNz,Jdet}]
];
1 Indices i and j are denoted by i1 and i2, respectively, inside the module.
11–5
Chapter 11: ISO-P QUADRILATERAL RING ELEMENTS 11–6
Quad4IsoPRingStiffness[ncoor_,Emat_,Kfac_,options_]:=
Module[{k,p=2,numer=False,qcoor,w,c,N1,N2,N3,N4,
dNr1,dNr2,dNr3,dNr4,dNz1,dNz2,dNz3,dNz4,Jdet,
r1,r2,r3,r4,z1,z2,z3,z4,rk,Be,Ke=Table[0,{8},{8}],
modname="Quad4IsoPRingStiffness: "},
If [Length[options]==2,{numer,p}=options,{numer}=options];
If [p<1||p>4,Print[modname,"p out of range"];Return[Null]];
{{r1,z1},{r2,z2},{r3,z3},{r4,z4}}=ncoor;
For [k=1,k<=p*p,k++,
{qcoor,w}= QuadGaussRuleInfo[{p,numer},k];
{{N1,N2,N3,N4},{dNr1,dNr2,dNr3,dNr4},{dNz1,dNz2,
dNz3,dNz4},Jdet}=Quad4IsoPShapeFunDer[ncoor,qcoor];
rk=r1*N1+r2*N2+r3*N3+r4*N4; c=Kfac*w*Jdet*rk;
Be={{dNr1, 0,dNr2, 0,dNr3, 0,dNr4, 0},
{ 0,dNz1, 0,dNz2, 0,dNz3, 0,dNz4},
{N1/rk, 0,N2/rk, 0,N3/rk, 0,N4/rk, 0},
{dNz1,dNr1,dNz2,dNr2,dNz3,dNr3,dNz4,dNr4}};
If [numer,Be=N[Be]];
Ke+=Simplify[c*Transpose[Be].(Emat.Be)];
]; Return[Ke]
];
Figure 11.5. Element stiffness formation module for 4-node iso-P quadrilateral ring.
The quadrilateral coordinates define the element location at which the shape functions and their
derivatives are to be evaluated. For the stiffness formation these are Gauss points, but for strain and
stress computations these may be other points, such as corner nodes.
Quad4IsoPShapeFunDer returns as function value the two-level list { Nf,dNr,dNz,Jdet }, in
which the first three are 4-entry arrays. List Nf collects the shape function values, dNr the shape
function r -derivatives, dNz the shape function z-derivatives, and Jdet is the Jacobian determinant.
11–6
11–7 §11.4 THE 4-NODE QUADRILATERAL RING ELEMENT
isotropic:
1+ν ν ν 0
E ν 1 ν 0
E= . (11.4)
(1 + ν)(1 − 2ν) ν ν 1+ν 0
0 0 0 1
2
−ν
Kfac A ring-span factor by which the stiffness matrix will be scaled. Typically
Kfac=1 to take the ring element to span one radian, Kfac=2π to take a span of
a complete circle.
options Processing options. This list may contain two items: { numer,p } or one:
{ numer }.
numer is a logical flag with value True or False. If True, the computa-
tions are forced to proceed in floating point arithmetic. For symbolic or exact
arithmetic work set numer to False.
p specifies the Gauss product rule to have p points in each direction. It may
be 1 through 4. For rank sufficiency, p must be 2 or higher. If p is 1 the element
will be rank deficient by two. If omitted p = 2 is assumed.
The module returns Ke as an 8 × 8 symmetric matrix pertaining to the following arrangement of
nodal displacements:
u(e) = [ u r 1 u z1 ur 2 u z2 ur 3 u z3 ur 4 u z4 ]T . (11.5)
Isotropic material
modulus E, z
Poisson's ratio ν
z 4 3 Ring element
1 2
d a
11–7
Chapter 11: ISO-P QUADRILATERAL RING ELEMENTS 11–8
Quad4IsoPRingBodyForces[ncoor_,Emat_,Kfac_,options_,bfor_]:=
Module[{k,m,p=2,numer=False,qcoor,w,c,N1,N2,N3,N4,dNr,dNz,
Jdet,r1,r2,r3,r4,z1,z2,z3,z4,rk,br,bz,br1,bz1,br2,bz2,
br3,bz3,br4,bz4,brc,bzc,bk,fe=Table[0,{8}],
modname="Quad4IsoPRingBodyForces: "}, m=Length[bfor];
If [Length[options]==2,{numer,p}=options,{numer}=options];
If [p<1||p>4,Print[modname,"p out of range"];Return[Null]];
If [m==2,{br,bz}=bfor;br1=br2=br3=br4=br;bz1=bz2=bz3=bz4=bz];
If [m==4,{{br1,bz1},{br2,bz2},{br3,bz3},{br4,bz4}}=bfor];
{{r1,z1},{r2,z2},{r3,z3},{r4,z4}}=ncoor;
For [k=1,k<=p*p,k++,
{qcoor,w}= QuadGaussRuleInfo[{p,numer},k];
{{N1,N2,N3,N4},dNr,dNz,Jdet}=Quad4IsoPShapeFunDer[ncoor,qcoor];
rk=r1*N1+r2*N2+r3*N3+r4*N4; c=Kfac*w*Jdet*rk;
brk=br1*N1+br2*N2+br3*N3+br4*N4;
bzk=bz1*N1+bz2*N2+bz3*N3+bz4*N4;
bk={N1*brk,N1*bzk,N2*brk,N2*bzk,N3*brk,N3*bzk,N4*brk,N4*bzk};
If [numer,bk=N[bk]]; fe+=c*bk;
]; Return[Simplify[fe]]
];
The script of Figure 11.8 compute and print the stiffness of the rectangular element shown in Figure
11.6, for E = 96, ν = 1/3, a = 4, b = 2 d = 0 and Kfac=1. Nodes 1 and 2 sit on the z axes. The
value of p is changed in a loop. The flag numer is set to True to use floating-point computation for
speed (see Remark 11.1). The computed entries of K(e) are exact integers for all values of p:
72 18 36 −18 −36 −18 0 18
18 153 −54 135 −90 −153 −18 −135
36 −54 144 −90 54 −36 90
72
−18 −90 −54 −135 −153
=
135 153 18
K(e) −36 −90
1×1
72 −54 144 90 36 54
−18 −153 54 −135 90 153 18 135
0 −18 −36 18 36 18 72 −18
18 −135 90 −153 54 135 −18 153
168 −12 24 12 −24 −36 48 36
−12 108 −24 84 −72 −102 −36 −90
24 −24 −120 72 −24 72
216 0
12 84 −120 −72 −282 36 −102
=
300
K(e) −24 −72
2×2
0 −72 216 120 24 24
−36 −102 72 −282 120 300 −12 84
48 −36 −24 36 24 −12 168 12
36 −90 72 −102 24 84 12 108
11–8
11–9 §11.4 THE 4-NODE QUADRILATERAL RING ELEMENT
232 −12 24 12 −24 −36 80 36
−12 108 −24 84 −72 −102 −36 −90
24 −24 216 −120 72 −24 72
0
12 84 −120 −72 −282 36 −102
=
300
K(e) −24 −72
3×3
0 −72 216 120 24 24
−36 −102 72 −282 120 300 −12 84
80 −36 −24 36 24 −12 232 12
36 −90 72 −102 24 84 12 108
280 −12 24 12 −24 −36 104 36
−12 108 −24 84 −72 −102 −36 −90
24 −24 216 −120 72 −24 72
0
12 −120 −72 −282 36 −102
=
84 300
K(e) −24 −72
4×4
0 −72 216 120 24 24
−36 −102 72 −282 120 300 −12 84
104 −36 −24 36 24 −12 280 12
36 −90 72 −102 24 84 12 108
As can be seen entries change substantially in going from p = 1 to p = 2. From then on only four
entries, associated with the r stiffness at nodes 1 and 4, change. The eigenvalues of these matrices
are:
The stiffness matrix computed by the one-point rule is rank deficient by three. For p = 2 and up it has
the correct rank of 7. The eigenvalues do not change appreciably after p = 2. Because the nonzero
eigenvalues measure the internal energy taken up by the element in deformation eigenmodes, it can
be seen that raising the order of the integration stiffens the element.
11–9
Chapter 11: ISO-P QUADRILATERAL RING ELEMENTS 11–10
Quad4IsoPRingBodyForces[ncoor_,Emat_,Kfac_,options_,bfor_]:=
Module[{k,m,p=2,numer=False,qcoor,w,c,N1,N2,N3,N4,dNr,dNz,
Jdet,r1,r2,r3,r4,z1,z2,z3,z4,rk,br,bz,br1,bz1,br2,bz2,
br3,bz3,br4,bz4,brc,bzc,bk,fe=Table[0,{8}],
modname="Quad4IsoPRingBodyForces: "}, m=Length[bfor];
If [Length[options]==2,{numer,p}=options,{numer}=options];
If [p<1||p>4,Print[modname,"p out of range"];Return[Null]];
If [m==2,{br,bz}=bfor;br1=br2=br3=br4=br;bz1=bz2=bz3=bz4=bz];
If [m==4,{{br1,bz1},{br2,bz2},{br3,bz3},{br4,bz4}}=bfor];
{{r1,z1},{r2,z2},{r3,z3},{r4,z4}}=ncoor;
For [k=1,k<=p*p,k++,
{qcoor,w}= QuadGaussRuleInfo[{p,numer},k];
{{N1,N2,N3,N4},dNr,dNz,Jdet}=Quad4IsoPShapeFunDer[ncoor,qcoor];
rk=r1*N1+r2*N2+r3*N3+r4*N4; c=Kfac*w*Jdet*rk;
brk=br1*N1+br2*N2+br3*N3+br4*N4;
bzk=bz1*N1+bz2*N2+bz3*N3+bz4*N4;
bk={N1*brk,N1*bzk,N2*brk,N2*bzk,N3*brk,N3*bzk,N4*brk,N4*bzk};
If [numer,bk=N[bk]]; fe+=c*bk;
]; Return[Simplify[fe]]
];
Figure 11.8. Module for computation of consistent node forces from a given body force field.
Kfac As in Quad4IsoPRingStiffness
bfor Body forces per unit volume. Specified as a two-item one-dimensional list:
{ br,bz },
or as a four-entry two-dimensional list:
{ br1,bz1 },{ br2,bz2 }, { br3,bz3 },{ br4,bz4 }.
In the first form the body force field is taken to be constant over the element.
The second form assumes body forces to vary over the element and specified
by values at the four corners, from which the field is interpolated bilinearly.
ClearAll[Em,Ν,a,b,d,h,p,num];
a=4; b=2; d=0; Kfac=2*Pi; Kfac=1; p=2;
ncoor={{d,0},{a+d,0},{a+d,b},{d,b}}; num=False;
fe=Quad4IsoPRingBodyForces[ncoor,Emat,Kfac,{num,p},9*{br,bz}];
Print["fe =",fe];
fe=Quad4IsoPRingBodyForces[ncoor,Emat,Kfac,{num,p},
9*{{a*br,bz},{(a+d)*br,bz},{(a+d)*br,bz},{d*br,bz}}];
Print["fe =",fe];
11–10
11–11 §11.4 THE 4-NODE QUADRILATERAL RING ELEMENT
Quad4IsoPRingStresses[ncoor_,Emat_,Kfac_,options_,ue_]:=
Module[{k,m,numer=False,qcoor,w,c,N1,N2,N3,N4,
dNr1,dNr2,dNr3,dNr4,dNz1,dNz2,dNz3,dNz4,Jdet,
r1,r2,r3,r4,z1,z2,z3,z4,rk,Be,recovery="D",
sigp,qctab={{-1,-1},{1,-1},{1,1},{-1,1}},
TG={{1+Sqrt[3]/2,-1/2, 1-Sqrt[3]/2,-1/2},
{-1/2, 1+Sqrt[3]/2,-1/2,1-Sqrt[3]/2},
{ 1-Sqrt[3]/2,-1/2,1+Sqrt[3]/2,-1/2},
{-1/2, 1-Sqrt[3]/2,-1/2,1+Sqrt[3]/2}},
sige=Table[0,{4},{3}]},
m=Length[options]; If [m>0,numer=options[[1]]];
If [m>1,recovery= options[[2]]];
If [recovery=="G", qctab=qctab/Sqrt[3]];
If [numer,qctab=N[qctab];TG=N[TG]];
{{r1,z1},{r2,z2},{r3,z3},{r4,z4}}=ncoor;
For [k=1,k<=Length[sige],k++, qcoor=qctab[[k]];
If [numer, qcoor=N[qcoor]];
{{N1,N2,N3,N4},{dNr1,dNr2,dNr3,dNr4},{dNz1,dNz2,
dNz3,dNz4},Jdet}=Quad4IsoPShapeFunDer[ncoor,qcoor];
rk=r1*N1+r2*N2+r3*N3+r4*N4;
Be={{dNr1, 0,dNr2, 0,dNr3, 0,dNr4, 0},
{ 0,dNz1, 0,dNz2, 0,dNz3, 0,dNz4},
{N1/rk, 0,N2/rk, 0,N3/rk, 0,N4/rk, 0},
{dNz1,dNr1,dNz2,dNr2,dNz3,dNr3,dNz4,dNr4}};
If [numer,Be=N[Be]];
sige[[k]]=Simplify[Emat.(Be.ue)] ];
If [recovery=="G", sigp=sige; sige=TG.sigp];
Return[Simplify[sige]];
];
Figure 11.10. Module for recovery of element corner stresses from displacements.
Running the test statements shown in Figure 11.9 (the factor of 9 in the supplied forces are to get
exact integer output) gives
f(e) = [ 24br 24bz 48br 48bz 48br 48bz 24br 24bz ]T , (11.8)
f(e) = [ 80br 24bz 176br 48bz 160br 48bz 64br 24bz ]T . (11.9)
11–11
Chapter 11: ISO-P QUADRILATERAL RING ELEMENTS 11–12
ClearAll[Em,ν,a,b,d,p,num,err,ezz,grz,ur,uz];
Em=100; ν=0; a=5; b=2; err=1/10; ezz=-5/100; grz=4/100;
ur[r_,z_]:=err*r; uz[r_,z_]:=ezz*z+grz*r;
ncoor={{d,0},{a+d,0},{a+d,b},{d,b}}; num=False;
Emat=Em/((1+ν)*(1-2*ν))*{{1+ν,ν,ν,0},{ν,1+ν,ν,0},
{ν,ν,1+ν,0},{0,0,0,1/2-ν}};
Print["Emat=",Emat//MatrixForm];
ue={}; For [n=1,n<=4,n++,{rn,zn}=ncoor[[n]]; urn=ur[rn,zn];
uzn=uz[rn,zn];AppendTo[ue,urn]; AppendTo[ue,uzn] ];
Print["ue=",ue];
sige=Quad4IsoPRingStresses[ncoor,Emat,Kfac,{num,"D"},ue];
Print["corner stresses=",sige//MatrixForm];
100
0 0 0
Emat
0 100 0 0
0 0 100 0
0 0 0 50
d d 5d 5d 5d 1 5d d 1 d
ue , , , , , , ,
10 25 10 25 10 10 25 10 10 25
10 5 10 2
5
corner stresses
10 10 2
10 5 10 2
10 5 10 2
The module is tested by the statements listed in Figure 11.11. The technique used is to generate
the element node displacements by evaluating a test displacement field
11–12
11–13 §11.4 THE 4-NODE QUADRILATERAL RING ELEMENT
in which {err , ezz , γr z } are specified strains, assumed constant over the element. Note that the hoop
strain is eθ θ = u r /r = err .
The field (11.11) is evaluated at the corner nodes to construct ue, which is then fed to the stress
recovery module. For the data err = eθ θ = 1/10, ezz = −5/100, γr z = 4/100, E = 100 and ν = 0
the recovered stresses must be
at the four corners. The test is run taking a = 5, b = 2 and leaving d as variable. The results,
shown in Figure 11.12, verify the stress values for both recovery methods, although only results for
recovery="D" are shown.
11–13
Chapter 11: ISO-P QUADRILATERAL RING ELEMENTS 11–14
11–14
11–15 Exercises
EXERCISE 11.1
11–15