I have modified the ULS Design Functions spreadsheet, last presented here, to analyse sections subject to bi-axial bending, and non-symmetrical sections. The new version makes use of the routines for splitting any section defined by XY coordinates into trapezoidal layers, described here. The new version (ULS Design Functions-biax.xlsb) has been added to the zip file along with the previous version, and can be downloaded from ULS Design Functions.zip, including full open source code.
Input and results for a wide rectangular section, subject to bi-axial bending and axial load, are shown in the screenshot below:
The direction of the applied moment is defined by MX and MY, then the Neutral Axis angle is adjusted so that the reaction force and moments are in equilibrium with the applied loads, by clicking the “Adjust NA Angle” button.
The concrete section is defined by XY coordinates of each corner, listed in a clockwise direction, and the reinforcement is defined in layers, by entering the coordinates of the start and end of each layer: For each layer the number of bars and bar diameter are defined, together with the steel properties for the first layer, and any subsequent layer with different properties. It is also possible to specify a prestress force for any layer.
It is also possible to define shapes with internal voids, as shown below, by listing the corners of the void in the anti-clockwise direction. In this case the line must be continuous from start to end, and the connection between the outer line and the void must be made with two separate lines, with a very small separation, so that separate lines do not overlap or cross at any point. See the example in the download file for more details.
The analysis is carried out by two user defined functions (UDFs), UMom and UMomA. UMom provides the detailed output shown above for a single set of applied loads. UMomA returns any one of the available output values for a range of applied axial loads, and a single value or range of Neutral Axis directions. Both functions return an array of values, and must be entered as an array function, as described at Using Array Functions and UDFs.