Joist loads#

Joists are analysed one at a time#

papermodels generates a joist array (e.g. J1.0) from one prototype line (see Marking up drawings). loadtracer analyses each joist in the array (J1.0-0, J1.0-1, …) as its own beam. That is accurate, but each beam under the array then carries one point load per joist, which is hard to compare with a hand calculation that uses a line load.

Distributed by default#

With joist_loads="distributed" (the default), loadtracer replaces each run of joist point loads on a member with one distributed load over the run, both in lt.expanded_pm and in the analysis model. The total load is unchanged.

For each load case, each joist reaction \(P_i\) is divided by the width that joist carries (half the distance to each neighbour) to give a line load intensity \(w_i\). The profile of the intensities along the run sets the shape of the distributed load:

Joist reactions

Distributed load

uniform (within joist_profile_rel_tol, default 10% of the mean)

uniform

increasing or decreasing along the run

trapezoidal, fitted through the intensities

anything else (e.g. peaking mid-run)

uniform, with a JoistLoadVariabilityWarning when the largest is joist_variability_ratio (default 2) or more times the smallest

In every case, the resultant of the distributed load equals the total of the joist reactions it replaces. The replaced point loads are kept in expanded_pm[tag]["loads"]["converted_point_loads"].

A run is broken at a gap of more than 1.5 times the median joist spacing, and needs at least two joists. Joists at the same location stay as point loads.

Comparing against hand calculations#

converted_joist_loads() returns one row per converted load and load case. It gives the load as a line load (w_start, w_end) and as an occupancy pressure over a trib width:

import pandas as pd

pd.DataFrame(lt.converted_joist_loads("FB2.0"))

member

array

joists

case

profile

start_loc

end_loc

w_start

w_end

occupancy

pressure

trib_width_start

approximate

FB2.0

J2.0

13

D

uniform

0.0

11.114

161.48

161.48

roof

15

10.77

False

The trib width is the line load divided by the pressure of the joists’ occupancy. It is flagged approximate (with a JoistTribWidthWarning) when the joists carry more than one occupancy, or loads transferred from other members. The occupancy used is then the one with the most area on the joists.

When to keep point loads#

Use joist_loads="point" to apply each joist reaction as a point load. The two give the same total load, but they can give different reactions on a continuous beam under a joist array whose reactions vary a lot. Example 2 (Example 2: Manually tagged elements) shows a case where this matters.