OpenSees Cloud
OpenSees AMI
Plate Rebar Material
Original Post - 08 Nov 2024 - Michael H. Scott
Visit Structural Analysis Is Simple on Substack.
Where fiber sections integrate stresses over two dimensions for beam-column line elements, fiber sections integrate stresses through only one dimension for shell elements. Either way, you’re performing volume integrals, whether it’s two dimensions in the section and one in the element or one dimension in the section and two in the element.
The LayeredShellFiberSection, where layers of NDMaterial objects are stacked to make a shell section, is the closest we can get to a generic fiber section for shells. Any NDMaterial, ranging from ElasticIsotropic to AwesomeConcrete, can be used as a layer in a layered shell fiber section.
But one NDMaterial in particular, the PlateRebarMaterial, has caught my attention.
A good example of code re-use by Yuli Huang and Xinzheng Lu, a PlateRebarMaterial object takes any UniaxialMaterial and makes the one-dimensional response multi-axial based on a user-specified angle of orientation. Think of tension steel in a slab.
But what is that angle of orientation relative to the local axes of the
ShellMITC4
element? Let’s find out with a simple example.
A simple shell section is made up two layers of concrete sandwiching one layer of steel. Not realistic, but I want something that will not make a shell element bend under pure membrane loading.
For the sake of demonstration, all layers are linear-elastic with NDMaterial for the concrete and UniaxialMaterial with PlateRebarMaterial for the steel.
import openseespy.opensees as ops
ops.wipe()
ops.model('basic','-ndm',3,'-ndf',6)
Ec = 3600; nu = 0
Es = 29000
tc = 5.5 # thickness of each outer layer
ts = 1.0 # thickness of the middle layer
ops.nDMaterial('ElasticIsotropic',1,Ec,nu)
ops.uniaxialMaterial('Elastic',1,Es)
theta = 0.0
ops.nDMaterial('PlateRebar',2,1,theta)
tag N mat1 thick1 ... matN thickN
ops.section('LayeredShell',1, 3, 1,tc,2,ts,1,tc)
The angle of orientation for the PlateRebarMaterial is input as zero
(theta=0.0
).
You will also notice I set the Poisson ratio equal to zero in the concrete material so that I wouldn’t have to think too hard about assertions later on.
Anyway, a simple element definition is shown below.
L = 20
b = 12
P = 100
ops.node(1,0,0,0); ops.fix(1,1,1,1,0,0,0)
ops.node(2,0,b,0); ops.fix(2,1,1,1,0,0,0)
ops.node(3,L,0,0); ops.fix(3,0,0,1,0,0,0)
ops.node(4,L,b,0); ops.fix(4,0,0,1,0,0,0)
# I J K L secTag
ops.element('ShellMITC4',1, 1,3,4,2, 1)
ops.timeSeries('Constant',1)
ops.pattern('Plain',1,1)
ops.load(3,P/2,0,0,0,0,0)
ops.load(4,P/2,0,0,0,0,0)
ops.analysis('Static','-noWarnings')
ops.analyze(1)
With the node and element definition shown above, the rebars should run
along the I-J axis of the ShellMITC4
element (along the global X-axis in
this case) with the normal stresses in the shell section shown below
(shear stresses in the outer layers not shown for clarity).
And if instead of theta
equal to 0.0
, we use 90.0
degrees, the rebars
should run perpendicular to the I-J axis of the ShellMITC4
element.
ops.nDMaterial('ElasticIsotropic',1,Ec,nu)
ops.uniaxialMaterial('Elastic',1,Es)
theta = 90.0
ops.nDMaterial('PlateRebar',2,1,theta)
tag N mat1 thick1 ... matN thickN
ops.section('LayeredShell',1, 3, 1,tc,2,ts,1,tc)
Changing nothing in the element definition, we should now have a model with rebars running along the global Y-axis, as shown below.
How can we make sure the angle of orientation is as expected?
The displacement of nodes 3 and 4 should match the known solution for membrane (axial) loading of this square plate with different material stiffnesses.
For the case of theta=0.0
, we can make the following assertion,
accounting for
some slight round-off.
from math import isclose
Ac = 2*tc*b
As = ts*b
u = ops.nodeDisp(3,1)
uexact = P*L/(Ec*Ac+Es*As)
assert isclose(u,uexact)
And with theta=90.0
, the rebar is ineffective and all load resistance
comes from the concrete.
u = ops.nodeDisp(3,1)
uexact = P*L/(Ec*Ac) # Steel should be ineffective
assert isclose(u,uexact)
Try this example yourself. You may see different interpretations of
theta
depending on which shell element you use. Also, see if you can
figure out what happens when using the PlateRebarMaterial with the three
noded shell elements.