Fibers of Higher Dimensions

When we talk about fiber sections in OpenSees, we often refer to Bernoulli sections where each fiber is in a state of uniaxial stress. This approach captures axial-moment interaction, which is important for reinforced concrete columns, whose cross-sections are defined using patch and layer commands.

Those same patch and layer commands can be used for NDFiber sections to simulate the interaction of axial and shear stresses in beams. Two NDMaterial implementations have a direct formulation of the beam fiber stress condition. One is ElasticIsotropicBeamFiber and the other is J2BeamFiber.

E = 29000
v = 0.3
Fy = 60
alpha = 0.005
Hkin = alpha/(1-alpha)*E

ops.nDMaterial('J2BeamFiber',1,E,v,Fy,0.0,Hkin)

ops.section('NDFiber',1)
ops.patch('circ',1,...) 

If you want to make axial-shear beam fibers out of other NDMaterial implementations, you can define the regular three-dimensional (six stress-strain components), then use that material in the patches and layers of your NDFiber section. The NDFiber section will wrap that material with a BeamFiberMaterial object (2D and 3D) that performs static condensation to get down to the axial-shear stress condition.

ops.ndMaterial('AwesomeConcrete',1,fc,...,beta0)

ops.section('NDFiber',1)
ops.patch('rect',1,...)

Beware that this approach with static condensation in each fiber can get pretty time consuming–AwesomeConcrete probably has a complicated state determination to begin with, so wrapping it in a Newton loop is intense.

Returning to the more simple J2BeamFiber, let’s do a section analysis of a hollow steel tube section.

To find the torque-twist relationship for the section, we can define zeroLengthSection element and use displacement control on the twist DOF.

ops.node(1,0,0,0); ops.fix(1,1,1,1,1,1,1)
ops.node(2,0,0,0)

# Same parameter values as above
ops.nDMaterial('J2BeamFiber',1,E,v,Fy,0.0,Hkin)

ri = 2.25 # Inner radius
ro = 2.50 # Outer radius

ops.section('NDFiber',1)
ops.patch('circ',1,8,4,0.0,0.0,ri,ro,0.0,360.0) 

ops.element('zeroLengthSection',1,1,2,1)

ops.timeSeries('Linear',1)
ops.pattern('Plain',1,1)
ops.load(2,0.0,0.0,0.0,1.0,0.0,0.0)

Nsteps = 300
dtwist = 0.03/Nsteps
ops.integrator('DisplacementControl',2,4,dtwist)

The torque-twist relationship is shown below, where the simulated results match the expected yield torque T=\tau_y J/r_o.

To show that axial-shear stress interaction is captured, let’s apply a constant bending moment of 0.4M_y to the section while it twists. As shown below, the flexural stresses reduce the torque at which the section yields in torsion.

If you get this NDFiber approach to work with AwesomeConcrete, I’d be happy to hear about it.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.