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
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
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)
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 radiusops.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 .
To show that axial-shear stress interaction is captured, let’s apply a constant bending moment of 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.