If you define a fiber-discretized cross section in OpenSees using section coordinate systems A and B shown below, will you get the same response when you apply axial load and bending moments to the sections?
The answer is yes. You will get the same response from sections A and B. The fiber sections compute the geometric centroid (based on area, not on area and material stiffness) and use this as the point of axial load application and reference axes for curvature in frame elements. The centroid computation is done automatically–it is not an option.
A majority of users are content with sections A and B giving the same response. But what if you have an unsymmetric section, e.g., a composite beam or an eccentrically loaded angle, where you want to control the reference axes? You’ll be out of luck with OpenSees.
Until now. The option to not base section computations on the geometric centroid was added in PR #507. Just add the
-noCentroid option to the fiber section definition. This option works for 2D and 3D fiber sections, as well as the 2D and 3D Thermal and NDFiber versions, in Python and Tcl.
ops.uniaxialMaterial('Elastic',1,29000) d = 10 # Section depth b = 5 # Section width Nfy = 8 # Fibers in y-direction Nfz = 4 # Fibers in z-direction # Section A ops.section('Fiber',2) ops.patch('rect',1,Nfy,Nfz,-d/2,-b/2,d/2,b/2) # Section B ops.section('Fiber',3,'-noCentroid') ops.patch('rect',1,Nfy,Nfz,0,0,d,b)
Applying the same axial load and moment to sections A and B will give different section deformations when using the
-noCentroid option. However, we can apply an equivalent force-couple system from section A to section B (or vice versa) in order to get the same strain profile.
You can verify that the strain at the top and bottom face is the same for section A and the equivalent section B. I used
zeroLengthSection elements for this verification, but you can obtain the same results with beam-column elements. The ability to control the section reference axes was long overdue in OpenSees.