AISC Database API

The AISC Steel package provides access to the AISC steel shapes database, allowing users to easily retrieve and utilize information about various steel shapes. There is one function:

AISCSteel.Database.aisc_databaseMethod
aisc_database(SteelShape)
aisc_database(filter_function::Function, SteelShape)

The aisc_database function provides access to the AISC Steel Shapes database. It can be used to retrieve all shapes or filter them based on a provided function.

Parameters

  • SteelShape: A type representing the steel shape, such as WShape, CShape, LShape, etc.
  • filter_function: An optional function that takes a collection of shapes and returns a filtered collection based on specific criteria.

Returns

  • If SteelShape is provided, it returns a collection of shapes of that type.
  • If filter_function is provided, it applies the function to the collection of shapes and returns the filtered results.

Example

julia> aisc_database(WShape); # Returns all WShapes from the AISC database.

julia> aisc_database(WShape) do wshapes
            filter!(wshapes) do w
                w.Ix < 100
            end
            sort!(wshapes, :weight)
       end; # Returns WShapes with Ix less than 100 that is sorted by weight.
source

AISC Database Example

Loading the WShape Database

This document serves as an example of how to work with the AISC database within the package.

Lets try to load the aisc database for WShapes.

import AISCSteel.Database: aisc_database
import AISCSteel.Shapes.IShapes.RolledIShapes as ris
df = aisc_database(ris.WShape)
first(df, 5)
5×33 DataFrame
Rowshapeweightareadbftwtfkk1hIxZxSxrxIyZySyryJCwWnoSw1QfQwrtshoPAPBPCPDTWGiWGo
String7Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Int64?
1W44X408408.0120.044.816.11.222.172.961.812538.91838700.02000.01730.018.01520.0297.0189.03.56134.0691000.0172.01500.0344.0994.04.3342.6134.0150.0106.0122.038.05.53
2W44X368368.0108.044.416.01.11.972.761.7538.9434700.01800.01560.017.91350.0265.0169.03.54100.0608000.0170.01340.0311.0894.04.2842.4133.0149.0105.0121.038.05.53
3W44X335335.098.544.015.91.031.772.561.7539.1431100.01620.01410.017.81200.0236.0150.03.4974.7535000.0168.01180.0278.0805.04.2442.2132.0148.0104.0120.038.05.53
4W44X290290.085.443.615.80.8651.582.361.62538.92527000.01410.01240.017.81040.0205.0132.03.4950.9461000.0166.01040.0248.0701.04.242.0131.0147.0103.0119.038.05.53
5W44X262262.077.243.315.80.7851.422.21.62538.93624100.01270.01110.017.7923.0182.0117.03.4737.3405000.0165.0928.0223.0630.04.1741.9131.0147.0102.0118.038.05.53

Place the shape of the database you want into the function, and the function will return a DataFrame with all the aisc shapes.

Loading the CShape Database

Here is another example loading the aisc database for CShapes

import AISCSteel.Shapes.CShapes as cs
df = aisc_database(cs.CShape)
first(df, 5)
5×38 DataFrame
RowshapeweightareadbftwtfkhxeoxpIxZxSxrxIyZySyryJCwWnoSw1Sw2Sw3QfQwroHrtshoPAPBPCPDTWGi
String15Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64String7
1C15X5050.014.715.03.720.7160.651.4412.38680.7990.5830.49404.068.553.85.2411.08.143.770.8652.65492.017.413.711.65.8614.034.15.490.9371.1714.439.743.433.737.412.1252.25
2C15X4040.011.815.03.520.520.651.4412.3760.7780.7670.392348.057.546.55.439.176.843.340.8831.45410.016.011.79.24.6414.028.65.710.9271.1514.439.242.733.537.012.1252
3C15X33.933.910.015.03.40.40.651.4412.360.7880.8960.332315.050.842.05.618.076.193.090.9011.01358.015.110.47.553.8114.025.25.940.921.1314.438.842.233.436.812.1252
4C12X3030.08.8112.03.170.510.5011.139.8940.6740.6180.367162.033.827.04.295.124.322.050.7620.861151.011.76.014.912.457.6616.84.540.9191.0111.532.335.527.230.39.751.75
5C12X2525.07.3412.03.050.3870.5011.139.90720.6740.7460.306144.029.424.04.434.453.821.870.7790.538130.011.05.294.021.997.6714.64.720.9091.011.532.035.027.130.19.751.75

Filtering the data

The aisc_database function can also be used with a filter_function passed as the first argument. A neat way to do this is using the do block syntax.

df = aisc_database(ris.WShape) do wshapes
        filter!(wshapes) do w
            w.Ix < 100
        end
        sort!(wshapes, :weight)
     end
first(df, 5)
5×33 DataFrame
Rowshapeweightareadbftwtfkk1hIxZxSxrxIyZySyryJCwWnoSw1QfQwrtshoPAPBPCPDTWGiWGo
String7Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Float64Int64?
1W6X8.58.52.525.833.940.170.1950.4450.54.94714.95.735.12.431.991.561.010.890.033315.85.551.061.032.781.055.6422.826.715.619.54.52.25missing
2W6X99.02.685.93.940.170.2150.4650.54.96416.46.235.562.472.21.721.110.9050.040517.75.61.191.153.041.065.6922.926.815.719.74.52.25missing
3W8X1010.02.967.893.940.170.2050.5050.56.88530.88.877.813.222.091.661.060.8410.042630.97.571.531.484.291.017.6926.830.719.723.76.52.25missing
4W10X1212.03.549.873.960.190.210.510.56258.85453.812.610.93.92.181.741.10.7850.054750.99.561.991.916.140.9839.6630.734.723.727.78.3752.25missing
5W6X1212.03.556.034.00.230.280.530.56254.96822.18.37.312.492.992.321.50.9180.090324.75.751.611.524.081.085.7523.227.216.120.14.52.25missing

Use Database to find optimum shapes

You can use the database to step through and find the optimum shape!

Let's see if we can find the optimum WShape for a member that can resist a moment of 250 kip-ft with an unbraced length of 20 ft.

using StructuralUnits
function optimum_shape(M_u, L_b)
    wshapes = aisc_database(ris.WShape) do wshapes
        sort!(wshapes, :weight)
    end

    for w_data in eachrow(wshapes)
        w = ris.WShape(w_data.shape)
        if ris.Flexure.calc_Mnx(w, L_b) * 0.9 >= M_u
            return w
        end
    end
    error("No shape found!")
end

w = optimum_shape(250kip*ft, 20ft)
w.shape
"W12X58"

Wow! Now you can quickly find optimum members for your designs!