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
-
Vented stream as CO2 equivalent
The CO2-equivalent mass flow of a stream released to the air.
CO2e = Σ F × zᵢ × MWᵢ × GWPᵢ
Process emissions (CO2 equivalent) process/emissions.js64-bit- CadCraft
- BimCraft
-
Emissions report
The emission of each tagged stream, fired unit and electric unit, the total per second and the total per year.
fired: CO2e = |Q| ÷ efficiency ÷ 1.055056e9 × factor; electric: CO2e = (|W| + |Q|) ÷ 3.6e6 × grid factor; per year = total × 3600 × hours
Process emissions (CO2 equivalent) process/emissions.js64-bit- CadCraft
- BimCraft
-
Number from a factor or cost cell
A cell such as '$1,250.00' as a number.
Imported carbon factors, prices and climate data data-packs.js64-bit- BimCraft
-
Carbon factor from a file row
A material's embodied-carbon factor in the unit the carbon pane works in.
A1-A3 factor = value × unit factor (1 for kg, m, m², m³ and items; 0.001 for tonnes)
Imported carbon factors, prices and climate data data-packs.js64-bit- BimCraft
-
Monthly climate from NASA POWER
Twelve monthly values of daily sunlight on a horizontal surface and of air temperature.
ghi = value rounded to 0.01 kWh/m²/day; T = value rounded to 0.01 °C
Imported carbon factors, prices and climate data data-packs.js64-bit- BimCraft
-
Monthly climate from PVGIS
Twelve monthly values of daily sunlight and air temperature, averaged over the years in the answer.
ghi = Σ H(h)_m ÷ years ÷ days in month; T = Σ T2m ÷ years; both rounded to 0.01
Imported carbon factors, prices and climate data data-packs.js64-bit- BimCraft
-
Location sent to the climate provider
The latitude and longitude put into the request address.
latitude.toFixed(3), longitude.toFixed(3)
Imported carbon factors, prices and climate data data-packs.js64-bit- BimCraft
-
Is a ray to the sun blocked
Whether the line from a point toward the sun meets a triangle of the model.
det = e₁ · (d × e₂); u = (t · (d × e₂)) ÷ det; v = (d · (t × e₁)) ÷ det; hit if 0 ≤ u, 0 ≤ v, u + v ≤ 1 and distance > tMin
Solar array shading pv-shade.js64-bit- BimCraft
- CivilCraft
-
Sample points on the modules
The points on each module from which rays are cast.
p = bilinear blend of the four corners at ((a + ½) ÷ k, (b + ½) ÷ k) + normal × lift
Solar array shading pv-shade.js64-bit- BimCraft
- CivilCraft
-
Shade fraction by month and hour
The share of the sample points in shadow at each of 12 × 24 sun positions.
frac = shaded points ÷ points
Solar array shading pv-shade.js64-bit- BimCraft
- CivilCraft
-
Beam light lost to shadows
The share of the direct sunlight the array loses to shading, over the year or chosen months.
loss = Σ beam × frac ÷ Σ beam
Solar array shading pv-shade.js64-bit- BimCraft
- CivilCraft
-
Cell temperature
The temperature of the cells from the air temperature and the light on the module.
T_cell = T_amb + (NOCT − 20) ÷ 800 × G
Solar yield estimate pv-yield.js64-bit- BimCraft
- CivilCraft
-
Module DC power
The power of one module at a given irradiance and cell temperature.
P = Wp × G ÷ 1000 × (1 + γ × (T_cell − 25))
Solar yield estimate pv-yield.js64-bit- BimCraft
- CivilCraft
-
Loss chain
The share of the DC energy left after soiling, mismatch, wiring, downtime and the inverter.
chain = (1 − soiling) × (1 − mismatch) × (1 − wiring) × (1 − availability) × inverter efficiency
Solar yield estimate pv-yield.js64-bit- BimCraft
- CivilCraft
-
Power in one hour
The light on the array, the cell temperature and the DC and AC power for one hour of a month's representative day.
G = beam × (1 − shade) + sky + ground; P = n × max(0, module power); AC before clipping = P ÷ 1000 × chain
Solar yield estimate pv-yield.js64-bit- BimCraft
- CivilCraft
-
Monthly figures
A month's light, shade loss and DC energy from its representative day.
month = day × days in month; shade loss % = (unshaded − shaded) ÷ unshaded × 100
Solar yield estimate pv-yield.js64-bit- BimCraft
- CivilCraft
-
Inverter clipping and monthly AC energy
The AC energy of each month after the inverter's rating limits the hourly power.
scale = P_ac ÷ Σ P when Σ P > P_ac; month AC = Σₕ P × scale × days, rounded to 0.1 kWh
Solar yield estimate pv-yield.js64-bit- BimCraft
- CivilCraft
-
Annual energy, specific yield and performance ratio of an array
An array's yearly DC and AC energy, kWh per kWp and performance ratio.
AC = Σ rounded months; specific yield = AC ÷ kWp; PR = AC ÷ (kWp × POA)
Solar yield estimate pv-yield.js64-bit- BimCraft
- CivilCraft
-
Plant totals
The energy, specific yield, performance ratio, clipping and shade loss of all arrays together.
PR = Σ AC ÷ Σ(kWp × POA); clipped % = clipped ÷ unclipped × 100
Solar yield estimate pv-yield.js64-bit- BimCraft
- CivilCraft
-
Unit factor
Chooses the factor that turns the file's unit into meters.
k = meters per file unit, or 0.001 when that is missing, zero or not finite
3DM import: units, placements and mesh points io/3dm-import.js64-bit- ModelCraft
- PartCraft
-
Mesh points in meters
Scales a mesh's points and builds the model's mesh from them.
p′ = p × k
3DM import: units, placements and mesh points io/3dm-import.js64-bit- ModelCraft
- PartCraft
-
Block placement matrix
Turns a block reference's matrix into the model's placement.
m[c × 4 + r] = x[r × 4 + c]; translation × k
3DM import: units, placements and mesh points io/3dm-import.js64-bit- ModelCraft
- PartCraft
-
Curve points in meters
Scales each curve's points and drops segments of no length.
a′ = a × k; kept when a′ ≠ b′
3DM import: units, placements and mesh points io/3dm-import.js64-bit- ModelCraft
- PartCraft
-
Mesh record: 32-bit and 64-bit points
Reads a mesh's points from the file and chooses between its 32-bit and 64-bit copies.
use the 64-bit points when |aᵢ − vᵢ| ≤ |vᵢ| × 10⁻⁶ + 10⁻⁶ × max(1, |aᵢ|) for every coordinate
3DM import: units, placements and mesh points io/3dm/objects.js64-bit- ModelCraft
- PartCraft
-
Single values by type
Reads one property value with the width the file states.
FBX reader: number types as stored io/fbx-parse.js64-bit- ModelCraft
-
64-bit whole numbers
Reads a signed 64-bit whole number from two 32-bit halves.
v = hi × 2³² + lo when −2²¹ ≤ hi < 2²¹; otherwise decimal text
FBX reader: number types as stored io/fbx-parse.jsExact- ModelCraft
-
Arrays by type
Reads an array of floats, doubles or whole numbers.
FBX reader: number types as stored io/fbx-parse.js64-bit- ModelCraft
-
End derivative coefficients
The factors that link the first control points to the first and second derivative at the start.
a₁ = p ÷ (U[p+1] − U[1]); b₁ = p ÷ (U[p+2] − U[2]); c₂ = (p − 1) ÷ (U[p+1] − U[2])
Matching and blending NURBS curves and surfaces nurbs/match.js64-bit- ModelCraft
- PartCraft
-
Point, direction and curvature at an end
What a curve's end looks like to the curve that must meet it.
t = C′ ÷ |C′|; out = ± t; speed = |C′|
Matching and blending NURBS curves and surfaces nurbs/match.js64-bit- ModelCraft
- PartCraft
-
Curve end matched to a target
Moves the first one to three control points so the curve meets the target with G0, G1 or G2.
P₀ = T; P₁ = P₀ + out × speed ÷ a₁; D₂ = out (C″ · out) + κ speed²; P₂ = P₁ + (a₁ (P₁ − P₀) + D₂ ÷ c₂) ÷ b₁
Matching and blending NURBS curves and surfaces nurbs/match.js64-bit- ModelCraft
- PartCraft
-
Blend curve between two ends
A Bézier curve joining two curve ends with the asked continuity.
G1: P₁ = A + out × α ÷ 3; G2: P₁ = A + out × α ÷ 5, P₂ = 2 P₁ − A + κ α² ÷ 20; α = chord × bulge
Matching and blending NURBS curves and surfaces nurbs/match.js64-bit- ModelCraft
- PartCraft
-
Frame on the target's edge
For a point near the target's edge: the nearest edge point, the outward direction in the tangent plane, the normal and the normal curvature.
d = (n × tₑ) ÷ |n × tₑ|, turned to point away from the surface
Matching and blending NURBS curves and surfaces nurbs/match.js64-bit- ModelCraft
- PartCraft
-
Surface edge matched to a target
Refits the first one to three rows of control points so the surface meets the target along an edge.
stations vᵢ = i ÷ M, M = max(samples, 4 × columns); rows fitted by least squares; accepted when gap ≤ g0, angle ≤ g1 and Δκ ≤ g2 (or relative ≤ g2rel)
Matching and blending NURBS curves and surfaces nurbs/match.js64-bit- ModelCraft
- PartCraft
-
Blend surface between two edges
A surface joining two surface edges, built from blend sections along them.
sections at t = i ÷ n, n = 8, 16, … ≤ 128; each a Bézier of degree 1, 3 or 5; interpolated along the edge
Matching and blending NURBS curves and surfaces nurbs/match.js64-bit- ModelCraft
- PartCraft
-
A number as STEP text
Writes one real number into the file.
String(x), with a decimal point added when it has none
STEP files of NURBS curves and surfaces nurbs/step.js64-bit- ModelCraft
- PartCraft
-
Knots and multiplicities
Turns a full knot vector into STEP's list of distinct knots with their counts.
STEP files of NURBS curves and surfaces nurbs/step.js64-bit- ModelCraft
- PartCraft
-
Edges that have collapsed to a point
Leaves a zero-length boundary edge, such as a pole, out of the face loop.
skipped when arc length ≤ 10⁻⁹ × surface size
STEP files of NURBS curves and surfaces nurbs/step.js64-bit- ModelCraft
- PartCraft
-
Trim loop written as a curve
Writes a trim loop as one closed curve on the face.
3D point = S(u, v) for each loop point; curve = straight segments through them
STEP files of NURBS curves and surfaces nurbs/step.js64-bit- ModelCraft
- PartCraft
-
Length unit of a file
Millimeters per file unit.
SI: prefix × 1000; conversion-based: value × its base unit
STEP files of NURBS curves and surfaces nurbs/step.js64-bit- ModelCraft
- PartCraft
-
Control points in millimeters
Reads each control point and scales it by the file's unit.
p′ = p × unit
STEP files of NURBS curves and surfaces nurbs/step.js64-bit- ModelCraft
- PartCraft
-
Trim loops read back
Turns a face's boundary edges into trim loops in the surface's own parameters.
33 samples per curved edge; each projected to (u, v); outer when |area| < 0.999 × (u range × v range)
STEP files of NURBS curves and surfaces nurbs/step.js64-bit- ModelCraft
- PartCraft
-
Quadrature nodes and weights
The eight points and weights used to integrate the path's speed.
Pattern along a path brep-bodies.js64-bit- PartCraft
-
Length of the path
The arc length of the path and the running length at each piece boundary.
piece length = h Σ wᵢ |C′(m + h xᵢ)|, h = (b − a) ÷ 2, m = (a + b) ÷ 2; L = Σ pieces
Pattern along a path brep-bodies.js64-bit- PartCraft
-
Parameter at an arc length
Finds the curve parameter that lies a given length along the path.
tₙ₊₁ = tₙ − (s(tₙ) − s) ÷ |C′(tₙ)|, kept inside the bracket by bisection
Pattern along a path brep-bodies.js64-bit- PartCraft
-
Path point nearest the seed
The arc length of the path point closest to the center of what is copied.
root of (C(s) − p) · C′(s) = 0 by bisection, beside the nearest of 8 samples per piece
Pattern along a path brep-bodies.js64-bit- PartCraft
-
Turn of each copy
Rotates each copy so it follows the path's direction without twisting.
R ← rot(t_prev → t) × R, in n = ⌈distance ÷ (L ÷ 2000)⌉ steps between stations
Pattern along a path brep-bodies.js64-bit- PartCraft
-
Modal coordinate word
Decides whether an address word such as X or Z is written on a line, and writes its value.
written when round(v × 1000) ≠ round(last × 1000); text = letter + v to 3 decimals
G-code written by text post definitions cam-postdef.js64-bit- PartCraft
-
Numbers in a line template
Fills the {variable} holes of a raw, comment or word template with values.
G-code written by text post definitions cam-postdef.js64-bit- PartCraft
-
Whole-number filter
The int filter a post can put on a value, for example a spindle speed.
int(s) = round(number(s))
G-code written by text post definitions cam-postdef.js64-bit- PartCraft
-
Arc center offsets I and J
The center of an arc move, written relative to the start point.
I = round₃(cₓ − round₃(X_last)); J = round₃(c_y − round₃(Y_last))
G-code written by text post definitions cam-postdef.js64-bit- PartCraft
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.