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
-
Duct size for a flow
A duct sized by equal friction, returned in millimeters.
Pipe and duct runs: layout, lengths and sizing mep-model.js64-bit- BimCraft
-
Drain sizes by fixture units
The smallest drain size that carries the fixture units reaching each sanitary run, never smaller than what flows into it.
grow when needed nominal > drawn nominal + 1e-9
Pipe and duct runs: layout, lengths and sizing mep-model.js64-bit- BimCraft
-
Pipe and duct schedules
Total length and piece count per pipe size, and length and surface per duct size.
length = Σ stored piece lengths; surface = Σ perimeter × length
Pipe and duct runs: layout, lengths and sizing mep-model.js64-bit- BimCraft
-
Friction rate of a round duct at the velocity limit
The pressure drop per meter used to propose a duct size when the calculation ran by velocity.
D = √(4 Q ÷ (π v)); rate = 0.02 × (1.204 ÷ D) × v² ÷ 2
Pipe and duct runs: layout, lengths and sizing mep-calc.js64-bit- BimCraft
-
Proposed duct sizes
The width and height proposed for each duct run that is too small or too fast.
size for the largest flow in the run, rounded to 1 mm
Pipe and duct runs: layout, lengths and sizing mep-calc.js64-bit- BimCraft
-
Reading a typed slope
Turns '1/4"/ft', '2%', '1:50' or '0.02' into rise per run.
inch per foot ÷ 12; percent ÷ 100; 1 ÷ n
Pipe and duct runs: layout, lengths and sizing mep-ui.js64-bit- BimCraft
-
Schedule totals
The total length, piece count and duct surface shown under the pipe and duct schedules.
ft² = mm² ÷ 92903.04
Pipe and duct runs: layout, lengths and sizing mep-ui.js64-bit- BimCraft
-
Runs handed to the takeoff
The plan length, pitch and surface height of pipe and duct pieces passed to TakeoffCraft.
pitch = atan(slope) × 180 ÷ π; heightFt = perimeter ÷ 304.8
Pipe and duct runs: layout, lengths and sizing mep-ui.js64-bit- BimCraft
-
Weighted sound reduction index
Rw and the adaptation terms C and Ctr from sixteen third-octave sound reduction values.
highest shift s with Σ max(0, ref + s − R) ≤ 32; Rw = ref₅₀₀ + s; C = round(X_A − Rw)
Sound insulation ratings and the mass law insul.js64-bit- BimCraft
-
Spectrum adaptation sum
The A-weighted level difference for a reference spectrum.
X_A = −10 lg Σ 10^((Lⱼ − Rⱼ) ÷ 10)
Sound insulation ratings and the mass law insul.js64-bit- BimCraft
-
Weighted impact sound level
Ln,w and the adaptation term CI from sixteen third-octave impact levels.
lowest shift s with Σ max(0, L − (ref + s)) ≤ 32; Ln,w = ref₅₀₀ + s; CI = round(10 lg Σ 10^(L ÷ 10) − 15 − Ln,w)
Sound insulation ratings and the mass law insul.js64-bit- BimCraft
-
Mass law
The sound reduction of a single-leaf wall from its mass per area and the frequency.
R = 20 lg(m × f) − 47
Sound insulation ratings and the mass law insul.js64-bit- BimCraft
-
Critical frequency
The frequency at which a panel's bending wave matches the speed of sound in air.
fc = c² ÷ (2π h) × √(12 ρ (1 − ν²) ÷ E), c = 343
Sound insulation ratings and the mass law insul.js64-bit- BimCraft
-
Mass-law reduction by octave band
The mass-law value in the octave bands from 125 to 4000 Hz, up to half the critical frequency.
m = ρ × h; R(f) for f ≤ fc ÷ 2
Sound insulation ratings and the mass law insul.js64-bit- BimCraft
-
Replacement years, cost and present value
Every replacement in the study period with its cost, and the totals by year and by part.
t = t₀ + k × life; cost = q × c × (1 + i)^t; PV = cost ÷ (1 + r)^t
Replacement schedule and cost over the building's life lifecycle.js64-bit- BimCraft
-
Replacement schedule as CSV
The schedule and the year-by-year costs written as text.
money = round(x × 100) ÷ 100; carbon = round(x × 10) ÷ 10
Replacement schedule and cost over the building's life lifecycle.js64-bit- BimCraft
-
Quantities of the building's parts
Window area, door counts, exterior wall area, room finishes, roof area and stairs taken from the model.
wall = Σ perimeter ÷ 1000 × height − openings; window = w ÷ 1000 × h ÷ 1000; quantity = round(q × 100) ÷ 100
Replacement schedule and cost over the building's life lifecycle-model.js64-bit- BimCraft
-
Age of an installed item
Years between an item's install date and today.
age = (today − installed) ÷ (365.25 days)
Replacement schedule and cost over the building's life lifecycle-model.js64-bit- BimCraft
-
Quantities of the building services
Equipment by class, meters of pipe and duct, and an estimate of the wiring.
pipe = round(Σ |pᵢ − pᵢ₋₁| ÷ 1000, 2); wiring = round(Σ nearest distances ÷ 1000 × 1.25, 2)
Replacement schedule and cost over the building's life lifecycle-model.js64-bit- BimCraft
-
Carbon per unit of each part
The embodied carbon of one unit of a part, from the model's carbon totals.
kg per unit = Σ carbon of the part's elements ÷ quantity
Replacement schedule and cost over the building's life lifecycle-model.js64-bit- BimCraft
-
Circle of an arc
The center, radius, angle and length of the arc between two points with a bulge.
θ = 4 atan(b); h = b c ÷ 2; R = ((c ÷ 2)² + h²) ÷ (2 |h|); length = R |θ|
Curved walls model-arcs.js64-bit- BimCraft
-
Chord of an arc of a given length
The straight distance between the ends of an arc of a given length and bulge.
chord = len × sin(θ ÷ 2) ÷ (θ ÷ 2)
Curved walls model-arcs.js64-bit- BimCraft
-
Arc height and bulge
How far the arc's middle stands off its chord, and the bulge for a typed height.
height = −b × c ÷ 2; b = −2 h ÷ c
Curved walls model-arcs.js64-bit- BimCraft
-
Arc through three points
The bulge of the arc from a through p to b.
d = 2 (a_x (p_y − b_y) + p_x (b_y − a_y) + b_x (a_y − p_y)); bulge = tan(θ ÷ 4)
Curved walls model-arcs.js64-bit- BimCraft
-
Chords of an arc
The points between an arc's ends when it is drawn or saved as straight pieces.
n = max(1, ⌈|θ| ÷ step⌉); point = C + R (cos f, sin f)
Curved walls model-arcs.js64-bit- BimCraft
-
Points along and off a wall
A point at a distance along a wall and an offset to its left, and the reverse, for straight and curved walls.
curved: p = C + (R − off × sg) (cos φ, sin φ), φ = a₀ + sg × s ÷ R
Curved walls model-arcs.js64-bit- BimCraft
-
Where an opening sits in a curved wall
The position and angle of a door or window in the wall's own axes, square to the wall at the opening's middle.
O = at(off + w ÷ 2) − T × w ÷ 2; angle = atan2(T) − chord angle
Curved walls model-arcs.js64-bit- BimCraft
-
Offset of an opening read back
The distance along a curved wall of an opening, from the matrix that places it.
offset = s(middle) − w ÷ 2
Curved walls model-arcs.js64-bit- BimCraft
-
Opening body in a curved wall
The four corners of the body that cuts an opening through a curved wall, with jambs along the radius.
half = w ÷ R ÷ 2; outer radius = r ÷ cos(half)
Curved walls model-arcs.js64-bit- BimCraft
-
Axis curve saved for a curved wall
The circle and its two trim points written as the wall's axis.
circle of radius R about the center in the wall's axes, trimmed from (0, 0) to (chord, 0)
Curved walls model-arcs.js64-bit- BimCraft
-
Profile with arc edges
The closed outline of a curved wall written with true arcs (IFC4) or chords (IFC2X3).
arc edge = start, middle of the arc, end
Curved walls model-arcs.js64-bit- BimCraft
-
Area of an outline
The signed area of a polygon.
A = ½ Σ (xᵢ yᵢ₊₁ − yᵢ xᵢ₊₁)
Drawn floors: outline, openings and quantities model-floors.js64-bit- BimCraft
-
Perimeter of an outline
The total length of the outline's edges.
P = Σ |pᵢ₊₁ − pᵢ|
Drawn floors: outline, openings and quantities model-floors.js64-bit- BimCraft
-
Do two edges cross
A yes or no on whether two segments properly cross.
cross when o(a, b, c) × o(a, b, d) < 0 and o(c, d, a) × o(c, d, b) < 0
Drawn floors: outline, openings and quantities model-floors.js64-bit- BimCraft
-
Is the outline usable
Refuses an outline with fewer than 3 corners, one that crosses itself, or one with almost no area.
refuse when |A| < 10 000 mm²
Drawn floors: outline, openings and quantities model-floors.js64-bit- BimCraft
-
Is a point inside the outline
The even-odd test used to check that an opening lies in its floor.
Drawn floors: outline, openings and quantities model-floors.js64-bit- BimCraft
-
Saving and reading the outline
The outline's points written as text in the file's length unit, and read back.
text = round(x ÷ unit, 3) , round(y ÷ unit, 3)
Drawn floors: outline, openings and quantities model-floors.js64-bit- BimCraft
-
Perimeter, area and volume written on a floor
The slab quantities, gross and net of the openings.
net area = A − Σ |hole|; volume = area × thickness
Drawn floors: outline, openings and quantities model-floors.js64-bit- BimCraft
-
Flights and landings of a ramp
Where each flight and landing starts and ends along the ramp, and at what height.
n = max(1, ⌈rise ÷ maxRise − 1e-9⌉); flight run = rise ÷ n × slope; steep when slope < 12 − 1e-9
Ramps: flights, landings and quantities model-ramps.js64-bit- BimCraft
-
Rise of a ramp
The height a ramp climbs: to its top level, else the rise typed.
rise = top elevation − own elevation
Ramps: flights, landings and quantities model-ramps.js64-bit- BimCraft
-
Flight slope, length and volume
The slope angle, sloped length and volume written on each flight.
slope = atan(Δz ÷ len); length = √(len² + Δz²); volume written = length × width × t
Ramps: flights, landings and quantities model-ramps.js64-bit- BimCraft
-
Values saved with a ramp
The start point, sizes, slope and the rise and run used, kept in the ramp's property set.
required slope = atan(1 ÷ slope)
Ramps: flights, landings and quantities model-ramps.js64-bit- BimCraft
-
Ramps following a level
Rebuilds ramps whose rise follows a level that moved.
rebuild when |rise − rise used| > 0.5 mm
Ramps: flights, landings and quantities model-ramps.js64-bit- BimCraft
-
Link matrix through both files' map positions
The matrix from the linked file's millimeters to the open model's, through the map grid both are placed on.
m = S(host unit) × host map⁻¹ × S(1 ÷ host map unit) × S(link map unit) × link map × S(1 ÷ link unit)
Placing a linked model model-links.js64-bit- BimCraft
-
Link matrix from two pairs of points
The turn and move that carry two picked points of the linked model onto two picked points of the open one.
a = atan2(h₁ − h₀) − atan2(l₁ − l₀); t = h₀ − R(a) × l₀
Placing a linked model model-links.js64-bit- BimCraft
-
The same change in the scene
Carries a link matrix between the file's millimeters and the viewer's scene.
A = F × m × F⁻¹; m = F⁻¹ × A × F
Placing a linked model model-links.js64-bit- BimCraft
-
Saving the link matrix
The matrix written into the model as text.
entry = round(v × 10⁹) ÷ 10⁹
Placing a linked model model-links.js64-bit- BimCraft
-
Sheet and scale
The paper size, the drawing's extent and the scale it prints at.
fits when W ÷ r ≤ room width and H ÷ r ≤ room height
Plan as a vector PDF model-pdf.js64-bit- BimCraft
-
Plan millimeters to the sheet
The scale factor and offsets that place the plan on the page.
k = 1 ÷ ratio; paper = offset + plan × k; points = paper × 72 ÷ 25.4
Plan as a vector PDF model-pdf.js64-bit- BimCraft
-
Coordinate written to the PDF
How a path coordinate in points is turned into text.
text = Number(v.toFixed(6))
Plan as a vector PDF model-pdf.js64-bit- BimCraft
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.