Resources Numerical accuracy
Calculations
Every calculation under our calculation policies: what it works out, its formula and the precision it runs at. Open one to see its code as it is in the released app.
Calculations
-
Joist and rafter span from the table
The allowed span of a joist or rafter size at its spacing.
column = first listed spacing ≥ spacing ÷ 25.4 − 0.05; span = least span of the listed species
Regulation limits read from the pack's tables addons/regs/lib/check.js64-bit- BimCraft
-
Horizontal span of a rafter
The span of the longest rafter or ceiling joist measured on the horizontal, compared with the table.
span = sloped length × cos(pitch × π ÷ 180)
Regulation limits read from the pack's tables addons/regs/lib/check.js64-bit- BimCraft
-
Insulation R-value of a wall type
The nominal R-value of a wall type's cavity and continuous insulation layers, in imperial units.
R = thickness (mm) ÷ 1000 ÷ λ × 5.678263
Regulation limits read from the pack's tables addons/regs/lib/check.js64-bit- BimCraft
-
Wall insulation against the table's options
Whether a wall type's insulation meets any of the cavity and continuous options of its climate zone.
met if cavity + 0.05 ≥ option cavity and continuous + 0.05 ≥ option continuous, for any option
Regulation limits read from the pack's tables addons/regs/lib/check.js64-bit- BimCraft
-
K-factor in SI units
Converts a head's K-factor from L/min per √bar to m³/s per √Pa.
k = K ÷ 1000 ÷ 60 ÷ √100000
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/hydraulics.js64-bit- BimCraft
-
Pipe friction
The friction loss in pascals per meter of pipe for a flow, an inside diameter and a roughness coefficient C.
Δp per m = 10.67 × Q^1.852 ÷ (C^1.852 × D^4.871) × 998.2 × 9.80665
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/hydraulics.js64-bit- BimCraft
-
Pipe sizes
Chooses for each pipe the smallest steel schedule 40 size that keeps the velocity within the limit.
Q = heads below × flow per head ÷ 1000 × 1.15; v = Q ÷ (π d² ÷ 4) ≤ vmax
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/hydraulics.js64-bit- BimCraft
-
Design areas to test
The groups of heads tried as the design area: blocks of rows at the far and near ends of the branch lines.
heads = ceil(area ÷ coverage); per row m = ceil(1.2 × √area ÷ spacing); rows = ceil(heads ÷ m)
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/hydraulics.js64-bit- BimCraft
-
Minimum flow and pressure at a head
The least flow and pressure every operating head must have.
q = density ÷ 1000 ÷ 60 × coverage; P = max((q ÷ k)², minimum head pressure)
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/hydraulics.js64-bit- BimCraft
-
Pressures and flows for a source pressure
The pressure at every node and the flow in every pipe when the source is at a given pressure and each operating head discharges K √P.
P(b) = P(a) − friction × (length + equivalent length) − ρ g Δz
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/hydraulics.js64-bit- BimCraft
-
Lowest source pressure
The lowest source pressure at which every operating head has its minimum.
upper bound doubled from 200000 Pa until it works, then halved 40 times
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/hydraulics.js64-bit- BimCraft
-
Head and pipe results
Each head's flow, pressure and density, each pipe's flow, velocity and pressure drop, and the total flow.
density = q × 1000 × 60 ÷ coverage; v = Q ÷ (π D² ÷ 4); total = Σ head flows
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/hydraulics.js64-bit- BimCraft
-
Supply pressure at a flow
The pressure the water supply gives at a flow, from the static and residual pressures of a flow test.
P = Ps − (Ps − Pr) × (Q ÷ Qr)^1.85
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/hydraulics.js64-bit- BimCraft
-
Required against available pressure
Takes the design area needing the most pressure, adds the hose allowance and margin, and compares with the supply.
Q total = Q heads × 60 + hose; required = P source ÷ 100000 + margin; ok if available ≥ required − 10⁻⁹
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/hydraulics.js64-bit- BimCraft
-
Head spacing
The number of heads each way and their spacing, the largest the hazard's maximum spacing and coverage allow.
nx = ceil(W ÷ maxS − 10⁻⁹); ny likewise; raised until (W ÷ nx)(D ÷ ny) ≤ max coverage; sx = W ÷ nx
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/layout.js64-bit- BimCraft
-
Point inside the room
Whether a point lies inside the room outline.
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/layout.js64-bit- BimCraft
-
Head in a partly filled cell
Moves the head of a grid cell the room only partly fills to the middle of the part inside.
position = mean of the cell's 6 × 6 sample points that lie inside
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/layout.js64-bit- BimCraft
-
Uncovered share of the room
The share of the room farther than 0.75 × the allowed spacing from every head.
uncovered = samples with no head within 0.75 × maxS ÷ samples inside the room
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/layout.js64-bit- BimCraft
-
Pipe length and rise
The length in meters and the rise of each pipe of the network from its two end points.
length = √(Δx² + Δy² + Δz²) ÷ 1000; dz = Δz ÷ 1000
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/layout.js64-bit- BimCraft
-
Sprinkler properties in the model
The K-factor, coverage, design density and hazard class written on each placed head.
CoverageM2 = round(coverage × 100) ÷ 100
Sprinkler layout and hydraulic calculation addons/sprinkler/lib/place.js64-bit- BimCraft
-
Segments of an arc
How many chords replace an arc of a given sweep.
n = max(2, ceil(|sweep| ÷ 2π × 36))
IFC curves and profiles as point lists ifc/geo-curve.jsExact- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Arc through three points
The circular arc of an indexed poly-curve from its start, middle and end points.
center = a + ((|ab|² (ac × n)) + (|ac|² (n × ab))) ÷ (2 |n|²), n = ab × ac
IFC curves and profiles as point lists ifc/geo-curve.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Circle and ellipse points
Points on a circle or ellipse between two parameters.
p = M · (r₁ cos θ, r₂ sin θ, 0), θ = a₀ + sweep × i ÷ n
IFC curves and profiles as point lists ifc/geo-curve.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Trimmed curve
The part of a line, circle, ellipse or other curve between two trims given as parameters or points.
conic: angle = parameter × angle unit, or atan2 of the trim point in the conic's frame
IFC curves and profiles as point lists ifc/geo-curve.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
B-spline curve points
Points on a B-spline curve, rational or not, at 12 evenly spaced parameters per knot span.
de Boor: d_j = (1 − a) d_{j−1} + a d_j, a = (u − k_i) ÷ (k_{i+p+1−r} − k_i); point = (x, y, z) ÷ w
IFC curves and profiles as point lists ifc/geo-curve.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Offset of a polyline
A 2D polyline moved to its left by a distance, with mitered corners.
p' = p + n × d ÷ max(0.2, n · n₁), n = normalized sum of the two edge normals
IFC curves and profiles as point lists ifc/geo-curve.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Circle and ellipse profiles
The outline of a circular, hollow circular or elliptical profile.
(r₁ cos a, r₂ sin a), a = 2π i ÷ 36
IFC curves and profiles as point lists ifc/geo-profile.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Fillets and edge radii
Replaces corners of a profile outline with arcs of given radii tangent to both edges.
d = r ÷ tan(half); center = corner + bisector × r ÷ sin(half), half = half the corner angle
IFC curves and profiles as point lists ifc/geo-profile.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
I-shape outline
The outline of a symmetric or asymmetric I-section with flange slopes, fillets and edge radii.
inner flange face = thickness + tan(slope) × distance from the quarter point of the outstand
IFC curves and profiles as point lists ifc/geo-profile.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Closing an outline
Drops repeated points of a profile curve and its closing point.
IFC curves and profiles as point lists ifc/geo-profile.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Straight extrusion
The solid of a profile swept along a direction by a depth, with end caps and sides.
top = bottom + direction × depth
IFC swept solids, primitives and faceted shapes ifc/geo-solid.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Side face of a sweep
Adds a four-sided face as one flat face or as two triangles.
IFC swept solids, primitives and faceted shapes ifc/geo-solid.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Revolved solid
The solid of a profile turned about an axis by an angle.
p_k = o + R(axis, angle × k ÷ steps) · (p − o), steps = 36 per full turn
IFC swept solids, primitives and faceted shapes ifc/geo-solid.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Frames along a path
The tangent, normal and binormal at each point of a 3D polyline, and the miter stretch at each bend.
tangent = normalize(t_in + t_out); miter = 1 ÷ max(0.25, t_in · tangent)
IFC swept solids, primitives and faceted shapes ifc/geo-solid.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Normal carried round a bend
Turns the section's normal by the rotation that takes the previous tangent to the next.
angle = atan2(|a × b|, a · b); v' = R(a × b, angle) v, made square to b
IFC swept solids, primitives and faceted shapes ifc/geo-solid.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Swept disk
A round bar or tube along a path, such as rebar, with an optional inner radius and bend radius.
section = 36-sided polygon of the radius; swept on the path's frames
IFC swept solids, primitives and faceted shapes ifc/geo-solid.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Bends of a swept path
Rounds the corners of a 3D polyline with arcs of a given radius.
d = min(r ÷ tan(half), 0.999 × each leg); center = corner + bisector × r' ÷ sin(half)
IFC swept solids, primitives and faceted shapes ifc/geo-solid.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Sphere
The mesh of an IfcSphere.
(r sin θ cos φ, r sin θ sin φ, r cos θ), θ = π i ÷ 12, φ = 2π j ÷ 24
IFC swept solids, primitives and faceted shapes ifc/geo-solid.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Outer bound of a face
Picks the largest loop of a face as its outer bound when the file marks none.
size = |Σ ((yₐ − y_b)(zₐ + z_b), (zₐ − z_b)(xₐ + x_b), (xₐ − x_b)(yₐ + y_b))| (twice the area)
IFC swept solids, primitives and faceted shapes ifc/geo-brep.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Repeated points of a loop
Drops consecutive points of a face loop that coincide, and a closing point equal to the first.
IFC swept solids, primitives and faceted shapes ifc/geo-brep.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Point on a clothoid
The point at a length along a clothoid from its origin.
x = ∫₀ˢ cos(k u²) du, y = ∫₀ˢ sin(k u²) du, k = sign(A) ÷ (2A²); Simpson's rule
IFC alignment curves and stations ifc/geo-align.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Points of a curve segment
Samples one alignment segment from its parent curve and places it at the segment's start.
n = max(2, min(400, ceil(|length| ÷ 2))); p_i = T · f(start + length × i ÷ n)
IFC alignment curves and stations ifc/geo-align.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Distance along the alignment
The horizontal distance of each sampled point from the start.
d_i = d_{i−1} + √(Δx² + Δy²)
IFC alignment curves and stations ifc/geo-align.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Height from the vertical profile
The height of each horizontal point from the alignment's vertical profile.
z = z_lo + (z_hi − z_lo) × (d − d_lo) ÷ (d_hi − d_lo)
IFC alignment curves and stations ifc/geo-align.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Point at a station
The position and direction on a curve at a distance along it.
p = p_{i−1} + (p_i − p_{i−1}) × (d − d_{i−1}) ÷ (d_i − d_{i−1})
IFC alignment curves and stations ifc/geo-align.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Placement along an alignment
The matrix of an element placed at a station with lateral, vertical and longitudinal offsets.
origin = p + left × lateral + (0, 0, vertical) + heading × longitudinal
IFC alignment curves and stations ifc/geo-align.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Solid between cross sections
The solid of an IfcSectionedSolidHorizontal: cross sections placed across the alignment at their stations and joined.
ring point = o + x × ((1 − f) a_x + f b_x) + y × ((1 − f) a_y + f b_y), f = (d − d₀) ÷ (d₁ − d₀)
IFC alignment curves and stations ifc/geo-align.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Cylinder and cone
A point on a cylindrical or conical surface from (u, v), and (u, v) from a point.
p = o + (r + v tan α)(x cos u + y sin u) + z v; u = atan2(d · y, d · x), v = d · z
IFC faces on curved surfaces ifc/geo-nurbs.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
Swept curve by length
The generating curve of an extruded or revolved surface as a polyline with a length parameter.
s_i = s_{i−1} + |p_i − p_{i−1}|; point at s by linear interpolation
IFC faces on curved surfaces ifc/geo-nurbs.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
-
B-spline basis functions
The non-zero basis functions of a B-spline at a parameter.
Cox-de Boor: N_r = saved + right × N_r ÷ (right + left)
IFC faces on curved surfaces ifc/geo-nurbs.js64-bit- BimCraft
- TakeoffCraft
- CivilCraft
- DetailCraft
A calculation is added only after its source was read. Each statement can be checked in the code shown on its policy's page; the app repositories are public. When a release changes a calculation, its page says so until it has been read again.