OpenSees Cloud
OpenSees AMI
Full Fiber Circle
Original Post - 15 Jun 2022 - Michael H. Scott
Visit Structural Analysis Is Simple on Substack.
Circular layers of fibers are required for simulating longitudinal
reinforcing steel in circular RC columns. Although the
layer circ
command accommodates fibers along an arc, I have never seen anyone use
this command for anything other than a full circle.
Some years before the extent of OpenSees GitHub history, I added a default constructor to the CircReinfLayer class, making the start and end angles optional, creating a full circle of fibers. This functionality worked fine along with the original constructor that specified start and end angles.
Then, a recent post in the OpenSees Facebook group pointed out that N-1 fibers are generated when the default start and end angles, 0 and 360 degrees, respectively, are specified explicitly. Below are two fiber sections with only a circular layer of fibers. The first section uses the default start and end angles while the second section specifies 0 and 360–same as the defaults.
ops.uniaxialMaterial('Elastic',1,29000)
N = 6 # Number of bars
Abar = 1.0 # Bar area
yc = 0; zc = 0 # Center
r = 10 # Radius
GJ = 1e5 # Whatever
# Section 1 - default start and end angles
ops.section('Fiber',1,'-GJ',GJ)
# matTag,N,A,y,z,r
ops.layer('circ',1,N,Abar,yc,zc,r)
# Section 2 - start and end angles = 0, 360
ops.section('Fiber',2,'-GJ',GJ)
# matTag,N,A,y,z,r,start,end
ops.layer('circ',1,N,Abar,yc,zc,r,0,360)
Sure enough, viewing the
fiber locations
returned by the fiberData
recorder option, we see there’s a difference.
Section 1: (y,z)
1: (10.0000, 0.0000)
2: (5.0000, 8.6603)
3: (-5.0000, 8.6603)
4: (-10.0000, -0.0000)
5: (-5.0000, -8.6603)
6: (5.0000, -8.6603)
Section 2: (y,z)
1: (10.0000, 0.0000)
2: (3.0902, 9.5106)
3: (-8.0902, 5.8779)
4: (-8.0902, -5.8779)
5: (3.0902, -9.5106)
6: (10.0000, -0.0000)
Further inspection of the fiber data reveals six fibers are generated for both sections, but section 2 places the first and last fibers at the same location.
The example scripts in the OpenSees wiki are correct, using 360/N as the start angle and 360 as the end angle. But it would be pretty easy to specify 0 and 360 for a circular layer and think nothing of it, sending years of earthquake engineering bridge research down the drain.
This issue was fixed with this commit, then fixed for real with this commit after remembering a) the difference between formal and actual arguments and b) not to get cocky with untested web commits.